美文网首页
Centos7 搭建 k8s(v1.28)环境以及架构简介

Centos7 搭建 k8s(v1.28)环境以及架构简介

作者: wayyyy | 来源:发表于2023-12-31 03:37 被阅读0次

重要的概念

搭建之前我们先理解几个概念:

Cluster

Cluster 是计算,网络,存储资源的集合。

Master

Master 是 Cluster 的大脑,它的主要职责是调度,即决定将应用放在哪里运行,为了实现高可用,可以运行多个Master。

Node

Node 的职责是运行容器的应用,Node 由 Master 管理,Node 负责监控并汇报容器的状态,同时根据Master 的要求管理容器的生命周期。

Pod

Pod 是 k8s 的最小工作单元,每个Pod包含了一个或多个容器,Pod 中的容器会作为一个整体备 Master 调度到一个Node上运行。

  • 为什么引入Pod ?
Controller
Service
Namespace

部署k8s

计划部署3节点的k8s cluster,部署模型如图:

image.png

viros1 作为 master,viros2 和 viros3 作为剩下的节点。

安装docker

所有节点上都需要安装docker。这里参见:docker-ce 的安装与卸载

注意,安装完成后,还需要,修改docker-ce默认配置为systemd,以及修改为国内官方镜像源。

# cat > /etc/docker/daemon.json << EOF 
{
  "storage-driver": "overlay2",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}
EOF

# systemctl restart docker
一些配置

所有节点,需要执行:

  • 设置3个节点/etc/hosts,以及ssh免密登录
    参考:https://www.jianshu.com/p/791cc53d7951

  • 关闭防火墙
    参考:https://www.jianshu.com/p/791cc53d7951

  • 关闭SELINUX
    参考:https://www.jianshu.com/p/791cc53d7951

  • 关闭swap分区
    参考:https://www.jianshu.com/p/5c039215992a

  • 启用网桥过滤模块

    # modprobe br_netfilter
    

    查看是否加载成功:

    # lsmod | grep br_netfilter
    
    image.png

    为什么要启用br_netfilter,参考:k8s中为什么需要br_netfilter与net.bridge.bridge-nf-call-iptables=1

  • 加载ipvs等模块
    在Kubernetes中Service有两种带来模型,一种是基于iptables的,一种是基于ipvs的两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块。

    • 安装ipset和ipvsadm
      # yum install ipset ipvsadm -y
      
    • 添加需要加载的模块写入脚本文件
      # cat > /etc/sysconfig/modules/ipvs.modules <<EOF
      modprobe -- ip_vs
      modprobe -- ip_vs_rr
      modprobe -- ip_vs_wrr
      modprobe -- ip_vs_sh
      modprobe -- nf_conntrack_ipv4
      EOF
      
      # /bin/bash /etc/sysconfig/modules/ipvs.modules
      
      查看模块是否加载:
      # lsmod | grep -e ip_vs -e nf_conntrack_ipv4
      
      image.png
  • 调整内核参数

    # cat > /etc/sysctl.d/kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-iptables=1
    net.bridge.bridge-nf-call-ip6tables=1
    net.ipv4.ip_forward=1      # 开启ip转发
    net.ipv4.tcp_tw_recycle=0  # 关闭快速回收处于TIME_WAIT状态的socket
    net.ipv6.conf.all.disable_ipv6=1  # 禁用ipv6
    vm.swappiness=0            # 禁止使用 swap 空间, 只有当系统 OOM 时才允许使用它
    vm.overcommit_memory=1     # 不检查物理内存是否够用
    vm.panic_on_oom=0          # 内存不足时, 启动 OOM killer
    EOF
    
    # sysctl -p /etc/sysctl.d/kubernetes.conf
    

    net.bridge.bridge-nf-call-iptables=1net.bridge.bridge-nf-call-ip6tables=1 参考:k8s 中为什么要开启bridge-nf-call-iptables

添加ali k8s repo 源
# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# yum makecache
安装kubelet,kubeadm ,kubectl

kubelet 运行在cluster所有节点上,负责启动Pod和容器,kubeadm 用于初始化 cluster,kubectl 是 k8s 的命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新各种组件。

# yum install kubelet kubeadm kubectl
# systemctl enable kubelet 
用 kubeadm 创建 cluster

如果想重新初始化则执行:kubeadm reset

下面开始初始化cluster:

kubeadm init \
--apiserver-advertise-address=192.168.48.20 
--image-repository registry.aliyuncs.com/google_containers

遇到报错:


image.png

然后参考:https://www.cnblogs.com/xlei/p/16999271.html 执行命令解决:

# rm -rf /etc/containerd/config.toml 
# systemctl restart containerd

继续报错:


image.png

这是因为国内连接不上registry.k8s.io,因为我有proxy,所以修改 /usr/lib/systemd/system/containerd.service ,加上proxy:

[Service]
Environment="http_proxy=http://192.168.48.1:7890"
Environment="https_proxy=http://192.168.48.1:7890"
...
image.png

再执行:systemctl daemon-reload && systemctl restart containerd

kubeadm init 之后:


image.png

master 节点编辑/etc/profile,加入:

export KUBECONFIG=/etc/kubernetes/admin.conf

再执行source /etc/profile

再再俩从节点上执行:

kubeadm join 192.168.48.20:6443 --token o5t82v.8zvsvsc273meng2y \
    --discovery-token-ca-cert-hash sha256:7192b77a8696565ace34a6d6a8f03303d1debafe70d543529af899fab6c52138

如果不小心清屏,那么可以再执行 kubeadm token create --print-join-command 查看token。

此时,我们3个节点集群已经初步ok,再master节点上执行kubectl get nodes,可以查看:

image.png
master 节点配置网络,使用Calico
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O

编辑 calico.yaml 文件,如图所示,新增加:

- name: IP_AUTODETECTION_METHOD
  value: "interface=ens33"
image.png

ens33 为 192.168.48.20 所在的网卡

执行:

# kubectl apply -f calico.yaml

部署的时候calico 一直报奇奇怪怪的错误,好像是去连接了代理去通信,把上面步骤 /usr/lib/systemd/system/containerd.service 中加入的proxy注释掉后,calico 安装成功。


image.png
k8s contaired docker 之前的关系

查看node上的所使用的container runtime:


image.png

我这里安装的k8s 是v1.28.4 版本,已经将容器运行时改为 contaired(不是docker),所以这么多pod在运行,我输入 docker ps 却看不到一个在运行的容器,那么怎么查看contaired上运行的容器呢?

# crictl config runtime-endpoint unix:///run/containerd/containerd.sock
# crictl ps
image.png

所以,再回来审视我们的安装步骤,理论上来说已经不需要安装docker了,而是需要安装 contaired,但是安装docker 好像会安装上contaired。

关于 k8s docker contaired 关系可以查看:https://zhuanlan.zhihu.com/p/494054143


运行一个demo

创建Namespace:

# cat > ns-nginx.yml << EOF
apiVersion: v1
kind: Namespace
metadata:
  name: nginx
  labels:
    name: nginx

EOF

# kubectl create -f ns-nginx.yml

查看刚才创建的命名空间:

# kubectl get namespaces
image.png

部署nginx 应用

# cat > nginx.yml << EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment1
  namespace: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx-demo
        image: nginx:1.14.0
        ports:
        - containerPort: 80
      
EOF

# kubectl create -f nginx.yml

查看 namesapce 为nginx 下的 pods

# kubectl get pods -n nginx
image.png

查看我们定义的deployment

# kubectl get deployment -n nginx
image.png

在上面我们定义了2个副本,执行如下命令课查看pod分别被调度到了哪些节点上。

kubectl get pods -n nginx -o wide
image.png

卸载k8s

TODO

k8s 架构组成简介


参考资料
1、https://learnku.com/docs/go-micro-build/1.0/kubernetes-1804-cluster-installation-tutorial-based-on-centos7/8877
2、https://www.cnblogs.com/Fzeng/p/17288286.html
3、http://123.57.207.179/article_detail/1646098660465628
4、https://blog.csdn.net/axibazZ/article/details/119301373

相关文章

网友评论

      本文标题:Centos7 搭建 k8s(v1.28)环境以及架构简介

      本文链接:https://www.haomeiwen.com/subject/yrrendtx.html