centos :centos :K8S v1.28.2集群搭建-docker版 - 一毛丶丶 - 博客园
centos:Kubernetes 详细安装教程_kubernetes 安装-优快云博客
准备工作:
1、主机名解析:确保每台机器的主机名能够被解析(可以通过 /etc/hosts 或 DNS)。
# 三台机子分别执行
sudo hostnamectl set-hostname k8s-master
sudo hostnamectl set-hostname k8s-node1
sudo hostnamectl set-hostname k8s-node2
sudo nano /etc/hosts
10.60.0.20 k8s-master
10.60.0.21 k8s-node1
10.60.0.22 k8s-node2
2、禁用交换分区:Kubernetes 要求禁用交换分区。
sudo swapoff -a
sudo sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
3、时间同步:确保所有机器的时间同步(可以使用 ntp 或 chrony)
4、配置内核参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
运行以下命令加载配置并生效:
sudo sysctl --system
5、手动改配置生效 启用 IP 转发(必须手动改,不然join不了节点)
# 【临时】启用 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 【永久】编辑 /etc/sysctl.conf 文件,添加或修改以下内容:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# 应用更改:
sudo sysctl -p
6、安装docker(一键脚本)
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
7、配置cgroup
cat > /etc/docker/daemon.json << EOF
{
"log-driver": "json-file",
"log-opts": {
"max-file": "3",
"max-size": "10m"
},
"registry-mirrors": ["https://ccr.ccs.tencentyun.com",
"https://hub.littlediary.cn",
"https://hub.haod.eu.org",
"https://hub.urlsa.us.kg"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
8、重启docker
systemctl daemon-reload
systemctl restart docker
docker info
9、cri配置(cri-docker )
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri-dockerd-0.3.9.amd64.tgz
10、解压并安装
解压下载的文件,并将二进制文件移动到 /usr/local/bin/
tar -xvf cri-dockerd-0.3.9.amd64.tgz
sudo mv cri-dockerd/cri-dockerd /usr/local/bin/
11、创建 systemd 服务文件 /etc/systemd/system/cri-docker.service:
sudo nano /etc/systemd/system/cri-docker.service
将以下内容粘贴到文件中:
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://github.com/Mirantis/cri-dockerd
After=network-online.target firewalld.service docker.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint unix:///var/run/cri-dockerd.sock --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
保存并退出编辑器。
13、启动并启用服务
重新加载 systemd 配置并启动 cri-dockerd 服务:
sudo systemctl daemon-reload
sudo systemctl enable cri-docker
sudo systemctl start cri-docker
检查服务状态:
sudo systemctl status cri-docker
14、安装 kubeadm、kubelet 和 kubectl(阿里源):
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
验证安装:
kubeadm version
kubectl version --client
15、控制节点(master)执行初始化kubernetes
初始化完成后,会输出一个join命令,先记住工作节点会用到;拷贝kubectl使用的连接k8s认证文件的默认路径:
kubeadm init \
--apiserver-advertise-address=10.60.0.20 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--kubernetes-version v1.28.2 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock \
--ignore-preflight-errors=all
配置 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
16、工作节点执行join加入集群
通过kubeadm join命令并手动加上--cri-socket=unix:///var/run/cri-dockerd.sock;
kubeadm join 10.60.0.20:6443 --token 7wid8a.mpua647dzdf8h45q \
--discovery-token-ca-cert-hash sha256:cfce690035c26849bbe75965e8fe86afa1f9835d66de28906a9865a41f3eac71 \
--cri-socket unix:///var/run/cri-dockerd.sock \
--ignore-preflight-errors=all
17、部署容器网络(三台)
下载完后还需要修改里面定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的--pod-network-cidr指定的一样,修改完以后执行部署命令,等Calico Pod都是Running状态,节点也会准备就绪。
wget https://docs.projectcalico.org/v3.25/manifests/calico.yaml --no-check-certificate
kubectl apply -f calico.yaml
kubectl get pods -n kube-system
18、查看节点状态(等几分钟)
kubectl get nodes
19、安装ui(dashbord)
使用官方推荐的 YAML 文件重新安装 Dashboard:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
检查 Dashboard 状态:
确保 Dashboard 的 Pod 和 Service 正常运行:(等几分钟,状态才正常)
kubectl get pods,svc -n kubernetes-dashboard
编辑 Dashboard 的 Service:
将 type: ClusterIP
修改为 type: NodePort
,保存并退出(:wq)
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
运行以下命令,查看 NodePort 端口:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard NodePort 10.96.123.123 <none> 443:30002/TCP 10m
访问:https://<NodeIP>:30002
创建管理员用户并获取令牌
创建 ServiceAccount:
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
EOF
绑定 ClusterRole:
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
获取令牌
kubectl -n kubernetes-dashboard create token admin-user