搭建Kubernetes集群
一、环境准备
- 安装docker
配置镜像
1 | { |
二、搭建集群
角色 | 主机名 | IP |
---|---|---|
master | i-0dkz1eq2 | 172.21.11.19 |
workder1 | i-canxuquv | 172.21.11.37 |
搭建过程参考:
【Kubernetes k8s】(两万字超详细)Ubuntu-22.04搭建 k8s-1.30.1集群,开启Dashboard-2.7.0、部署ingress-nginx-1.10.1_ubuntu
K8S相关组件apt install下载失败的话,请配置阿里云镜像源
kubernetes镜像_kubernetes下载地址_kubernetes安装教程-阿里巴巴开源镜像站
初始化Master节点
1 | sudo kubeadm init \ |
注意以下几个配置:
apiserver-advertise-address:主机地址
control-plane-endpoint=i-0dkz1eq2:主机名称,可以修改为类似k8s-master、k8s-worker
service-cidr:Service 的虚拟 IP 地址范围。
pod-network-cidr:Pod 的网络地址范围。后续配置CNI还会用到,需要一致。Flannel默认10.244.0.0/16
master节点初始化完成后,会输出如下的内容,用于worker节点加入。
1 | kubeadm join i-0dkz1eq2:6443 --token x84vbt.8dnhwxyxn111f1cb \ |
Worker节点加入集群
在worker节点上运行刚才master节点kubeadm join最后输出的内容,包括token和ca证书
1 | kubeadm join i-0dkz1eq2:6443 --token hpcimj.mivikhgk5vzjdfe4 \ |
CNI插件镜像无法下载解决方案:
一:手动拉取并使用tag标记
docker.io/flannel/flannel:v0.25.6
1 | sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2 |
二:配置Containerd镜像源
CNI插件相关
重置后重新加入k8s集群报cni plugin not initialized解决方法
最终效果:显示Ready表示节点正常运行中
1 | root@i-0dkz1eq2:~# kubectl get node |
三、安装K8S Dashboard
按照【Kubernetes k8s】(两万字超详细)Ubuntu-22.04搭建 k8s-1.30.1集群,开启Dashboard-2.7.0、部署ingress-nginx-1.10.1-CSDN博客
登录的TOKEN记得保存
1 | eyJhbGciOiJSUzI1NiIsImtpZCI6IjlsVm5CUUdiQ2ZHenVBRjlxNklnSmQ2eXZsUEFPdmtRRWphdkhfRHN0OWsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiMjU1NzBjMi02YTMyLTQ5OTMtYWFmMy04Nzk1ODRlOGE5MTYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.fiOYGCZHI3jYSU9Qs5EUujaqbRoJ0G0E7389tccO3bwk3k7LuxYcZus73pn1ra7wRMdbdmXK1ZSvwNtFbkZfJfS8GUGorFa3k3XQYm056V1lN6IpyaB7w7iaNCmNUgyc-7t2ifDYXR7s01utPS7UmfutVtkHhAp8Pp6s5XB9VrCT4cHzOeX8kclg9nugNcRGHJ1TgUTDFh0TnyKacSM53Jhx6rXsqb32yzSfvGxpQORzj4T4Y5WQrh7rQsc0F7F__YZX_xWNnRfBYt1yG0iJ7iD1XoiCCREYNzUaUCiSY3KWy2PoZA4wnAiD3BrWZEzFPRF9NnHNMj7FpXA6KMyW6w |
为什么可以通过集群中任意一台节点IP:Port访问dashboard,既然dashboard仅部署在Master上?
1 | kind: Service |
我们可以看到dashboard是一个service,Kubernetes 使用 Service 对 Pod 提供访问入口,抽象了 Pod 的 IP 地址,使得集群内的任何节点都可以访问服务。Dashboard 作为一个在 Kubernetes 内部运行的应用,也通过一个 Service 来暴露访问接口。并且它是NodePort类型的,每个节点的特定端口都能直接访问 Dashboard。
四、常用命令
查看所有Pod信息
kubectl get pods -A -o wide
重启命令
systemctl restart kubelet
systemctl restart containerd