K8s架构
k8s内部是有几个组件的,分别是controller manager,api-server,scheduler,kubelet以及etcd,kube-proxy还有k8s客户端kubectl
controller manage
首先介绍的是controller manager,他是相当于大老板的助理,工作是跟进用户的需求,如果用户需要2个pod,但是现在只启动了一个,那么就会被他发现
api-server
api-server 这个组件是非常重要的,所有的组件都会与api-server通信,并且只有api-server能够访问etcd数据库
scheduler
scheduler是一个调度器,当api-server收到客户端的创建pod请求之后,他会使用一系列算法得出这些pod应该在哪些节点上被创建出来,没有调度的话可能会出现2个节点,一个负载非常高,一个负载非常低
这样显然是不太合适的,scheduler就是用来防止这样的事情产生的
kubelet
kubelet 是用来控制pod的,当调度器调度完成之后,被分配的节点上的kubelet会按照要求操作pod,比如创建,删除,停止,kubelet每个节点上都有,因为他需要对pod进行管理
etcd
这是一个键值对数据库,很多集群都是用到这个了,比如OpenStack用的也是这个,他是用来存放一些键值对的数据的
kube-proxy
这个kube-proxy他就是用来管理内部的网络的,因为集群内部的网络是互通的,但是外部访问不到,我们通过这个组件创建SVC,外部网络就可以通过SVC来访问到这个pod了
kubectl
这个就是我们客户端工具,我们只需要通过这个工具就可以完成对集群的控制
k8s搭建
先配置hosts文件,将节点都维护进去
- 关闭防火墙,selinux,每个节点都需要做
# 在所有节点执行 [root@master ~]# systemctl disable --now firewalld [root@master ~]# sed -i "s|^SELINUX=enforcing|SELINUX=disabled|g" /etc/selinux/config
- 关闭swap,每个节点都需要做
[root@master ~]# swapoff -a [root@master ~]# vim /etc/fstab # 注释掉swap /dev/mapper/cs-root / xfs defaults 0 0 UUID=01ff8a7c-2b2b-4690-9500-c8816ccb2f4f /boot xfs defaults 0 0 # /dev/mapper/cs-swap none swap defaults 0 0
- 安装docker-ce,每个节点都需要做,安装docker是因为在安装docker的时候他会直接帮你把containerd一并安装好,当然,你也可以单独安装containerd
[root@master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [root@master ~]# sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo [root@master ~]# yum -y install docker-ce [root@master ~]# systemctl enable --now docker
- 开启内核路由转发,每个节点都需要做
# 在sysctl.conf里面加入这3条 [root@master ~]# vim /etc/sysctl.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 [root@master ~]# sysctl -p
- 设置cgroup,每个节点都需要做
# 生成默认配置 [root@master ~]# containerd config default > /etc/containerd/config.toml # 将cgroup打开 [root@master ~]# vim /etc/containerd/config/toml # 找到这一行配置,将false改为true SystemdCgroup = true
- 配置k8syum源,每个节点都需要做
[root@master ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
- 设置crictl运行端点,每个节点都需要做
cat <<EOF > /etc/crictl.yaml runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 5 debug: false EOF
- 安装kube工具,我安装的是1.26版本,每个节点都需要做
[root@master ~]# yum install kubelet-1.26.0 kubeadm-1.26.0 kubectl-1.26.0 -y # 开机自启kubelet [root@master ~]# systemctl enable --now kubelet Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /usr/lib/systemd/system/kubelet.service.
- 集群初始化,只在master节点做
[root@master ~]# kubeadm init --kubernetes-version=v1.26.0 --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers 省略部分信息,只看这里 Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.200.200:6443 --token pmwfg5.4675xnktludacafe \ --discovery-token-ca-cert-hash sha256:28def19535f7856ccaab7552abf7831184e842ef743eb305ce563225fdea6b47
- 将节点加入集群,在node节点上执行
# 将上面给出的kubeadm join 命令直接复制执行 kubeadm join 192.168.200.200:6443 --token pmwfg5.4675xnktludacafe \ --discovery-token-ca-cert-hash sha256:28def19535f7856ccaab7552abf7831184e842ef743eb305ce563225fdea6b47
- 到master节点查看是否已经加入
[root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady control-plane 3m24s v1.26.0 node1 NotReady <none> 7s v1.26.0 node2 NotReady <none> 0s v1.26.0
- 安装网络插件,calico
# 先将yaml文件下载 [root@master ~]# wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/tigera-operator.yaml # 这个文件可以直接使用 [root@master ~]# kubectl create -f tigera-operator.yaml # 下载第二个文件 [root@master ~]# wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/custom-resources.yaml # 这个文件需要修改 [root@master ~]# vim custom-resources.yaml # 将里面的cidr: 改成你初始化集群的时候指定的网段 cidr: 10.244.0.0/16 # 搜索k8s.io,将镜像仓库换成国内的,不然拉不到pause的镜像 [root@master ~]# kubectl create -f custom-resources.yaml
- 稍等一会之后再去查看集群状态,会变成Ready
[root@master ~]# kubectl get node NAME STATUS ROLES AGE VERSION master Ready control-plane 21m v1.26.0 node1 Ready <none> 17m v1.26.0 node2 Ready <none> 17m v1.26.0
本文来自博客园,作者:FuShudi,转载请注明原文链接:https://www.cnblogs.com/fsdstudy/p/17950308
分类: CKA