一、环境准备

  1. 安装docker

Ubuntu安装docker

配置镜像

1
2
3
4
5
6
7
8
9
10
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://mirror.iscas.ac.cn"
]
}

二、搭建集群

角色 主机名 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集群 - 许大仙 - 博客园

K8S相关组件apt install下载失败的话,请配置阿里云镜像源

kubernetes镜像_kubernetes下载地址_kubernetes安装教程-阿里巴巴开源镜像站

初始化Master节点

1
2
3
4
5
6
7
8
9
sudo kubeadm init \
--apiserver-advertise-address=172.21.11.19 \
--image-repository=registry.aliyuncs.com/google_containers \
--control-plane-endpoint=i-0dkz1eq2 \
--kubernetes-version=v1.28.14 \
--service-cidr=10.50.0.0/16 \
--pod-network-cidr=10.60.0.0/16 \
--cri-socket=unix:///run/containerd/containerd.sock

注意以下几个配置:

  • 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
2
3
4
5
6
7
8
9
10
kubeadm join i-0dkz1eq2:6443 --token x84vbt.8dnhwxyxn111f1cb \
--discovery-token-ca-cert-hash sha256:fc6e72dc3d74d9a7ff5168614f1368773a39a4125b780904b6db3b009e0daef4

# 生成一个永不过期的token
kubeadm token create --ttl 0
hpcimj.mivikhgk5vzjdfe4

kubeadm join i-0dkz1eq2:6443 --token hpcimj.mivikhgk5vzjdfe4 \
--discovery-token-ca-cert-hash sha256:fc6e72dc3d74d9a7ff5168614f1368773a39a4125b780904b6db3b009e0daef4

Worker节点加入集群

在worker节点上运行刚才master节点kubeadm join最后输出的内容,包括token和ca证书

1
2
kubeadm join i-0dkz1eq2:6443 --token hpcimj.mivikhgk5vzjdfe4 \
--discovery-token-ca-cert-hash sha256:fc6e72dc3d74d9a7ff5168614f1368773a39a4125b780904b6db3b009e0daef4

CNI插件镜像无法下载解决方案:

一:手动拉取并使用tag标记

docker.io/flannel/flannel:v0.25.6

1
2
3
4
5
6
7
8
9
10
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 

sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2 docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel2

sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel:v0.25.6

sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/flannel/flannel:v0.25.6 docker.io/flannel/flannel:v0.25.6

sudo ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/pause:3.6-linuxarm64
sudo ctr -n k8s.io images tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/registry.k8s.io/pause:3.6-linuxarm64 registry.k8s.io/pause:3.6

blog.51cto.com

二:配置Containerd镜像源

Containerd配置国内镜像源

CNI插件相关

重置后重新加入k8s集群报cni plugin not initialized解决方法

最终效果:显示Ready表示节点正常运行中

1
2
3
4
root@i-0dkz1eq2:~# kubectl get node
NAME STATUS ROLES AGE VERSION
i-0dkz1eq2 Ready control-plane 3h56m v1.28.14
i-canxuquv Ready <none> 10m v1.28.14

三、安装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
2
3
4
5
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard

我们可以看到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