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 ~] |
| [root@master ~] |
- 关闭swap,每个节点都需要做
| [root@master ~] |
| [root@master ~] |
| |
| /dev/mapper/cs-root / xfs defaults 0 0 |
| UUID=01ff8a7c-2b2b-4690-9500-c8816ccb2f4f /boot xfs defaults 0 0 |
| |
- 安装docker-ce,每个节点都需要做,安装docker是因为在安装docker的时候他会直接帮你把containerd一并安装好,当然,你也可以单独安装containerd
| [root@master ~] |
| [root@master ~] |
| [root@master ~] |
| [root@master ~] |
- 开启内核路由转发,每个节点都需要做
| |
| [root@master ~] |
| net.bridge.bridge-nf-call-ip6tables = 1 |
| net.bridge.bridge-nf-call-iptables = 1 |
| net.ipv4.ip_forward = 1 |
| [root@master ~] |
- 设置cgroup,每个节点都需要做
| |
| [root@master ~] |
| |
| [root@master ~] |
| |
| SystemdCgroup = true |
| |
| |
| sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9" |
- 配置k8syum源,每个节点都需要做
| [root@master ~] |
| [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 ~] |
| |
| [root@master ~] |
| Created symlink /etc/systemd/system/multi-user.target.wants/kubelet.service → /usr/lib/systemd/system/kubelet.service. |
- 集群初始化,只在master节点做
| [root@master ~] |
| 省略部分信息,只看这里 |
| 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 192.168.200.200:6443 --token pmwfg5.4675xnktludacafe \ |
| --discovery-token-ca-cert-hash sha256:28def19535f7856ccaab7552abf7831184e842ef743eb305ce563225fdea6b47 |
- 到master节点查看是否已经加入
| [root@master ~] |
| 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
| |
| [root@master ~] |
| |
| [root@master ~] |
| |
| [root@master ~] |
| |
| [root@master ~] |
| |
| cidr: 10.244.0.0/16 |
| |
| [root@master ~] |
- 稍等一会之后再去查看集群状态,会变成Ready
| [root@master ~] |
| 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 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程