kubeadm部署k8s

元气满满
2026-03-02 / 0 评论 / 0 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2026年03月12日,已超过229天没有更新,若内容或图片失效,请留言反馈。

关闭防火墙

systemctl stop firewalld ; systemctl disable firewalld
setenforce 0
sed -i.bak 's@SELINUX=.*@SELINUX=disabled@g' /etc/selinux/config

swapoff -a && sudo sed -i '/swap/ s/^/#/' /etc/fstab && mount -a

内核参数修改

echo "modprobe br_netfilter" >> /etc/profile
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sysctl -p /etc/sysctl.d/k8s.conf 

配置阿里云 Kubernetes yum 源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装基础软件包

yum -y install epel-release yum-utils
yum -y install device-mapper-persistent-data lvm2 wget net-tools nfs-utils iptables-services lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo libaio-devel wget vim ncurses-devel autoconf automake zlib-devel openssh-server socat ipvsadm conntrack telnet iptables-services nginx-mod-stream

开启ipvs

开启 ipvs
不开启 ipvs 将会使用 iptables,但是效率低,所以官网推荐需要开通 ipvs 内核

tee ipvs.modules <<-'EOF'
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do
 /sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
 if [ 0 -eq 0 ]; then
 /sbin/modprobe ${kernel_module}
 fi
done
EOF


chmod 755 ipvs.modules && bash ipvs.modules && lsmod | grep ip_vs

安装docker

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install docker-ce-19.03.5 docker-ce-cli-19.03.5 containerd.io -y

启动docker

systemctl start docker && systemctl enable docker

tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hxn0tro1.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
} 
EOF

systemctl daemon-reload && systemctl restart docker && docker info |egrep " Cgroup Driver:" && systemctl status docker --no-pager

安装kubeadm

# 查看版本
yum search kubelet --showduplicates | sort -r

yum -y install kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet

下载镜像

tee image.txt <<-'EOF'
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.20.6
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.20.6
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.20.6
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.20.6
docker pull calico/pod2daemon-flexvol:v3.18.0
docker pull calico/node:v3.18.0
docker pull calico/cni:v3.18.0
docker pull calico/kube-controllers:v3.18.0
docker pull registry.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.aliyuncs.com/google_containers/coredns:1.7.0
docker pull registry.aliyuncs.com/google_containers/pause:3.2
EOF

bash image.txt

使用kubeadm初始化集群

kubeadm init --kubernetes-version=1.23.0 --image-repository registry.aliyuncs.com/google_containers --apiserver-advertise-address=192.168.4.6  --service-cidr=10.10.0.0/16 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all --v=5

注:--image-repository registry.aliyuncs.com/google_containers 为保证拉取镜像不到国外站点拉取,手动指定仓库地址为 registry.aliyuncs.com/google_containers。kubeadm 默认从k8ss.grc.io 拉取镜像。 本地有导入到的离线镜像,所以会优先使用本地的镜像

节点注册命令保存下来,以备稍后使用
--discovery-token-ca-cert-hash sha256:cbc4154daaba6b6a1355a7c54ec22ecdafab566464fd7ed257097dafedeb7065

配置 kubectl 的配置文件,保存一个证书,这样 kubectl 命令可以使用这个证书对 k8s 集群进行管理
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config
# kubectl get nodes

安装网络插件

calico

# 使用 Calico 网络插件
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

Flannel

# 使用 Flannel 网络插件
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 或者访问
https://gitee.com/kexinzz/helm/blob/master/kube-flannel.yml

node污点

这里我们会发现node节点污点,删除不掉

01.png

于是,我们就更改pod yaml接受容忍

#找到yaml文件中 tolerations: 字段添加如下内容
tolerations:
- key: node.kubernetes.io/not-ready
  operator: Exists
  effect: NoSchedule

  #完成后我们部署pod插件,就可以看到pod成功部署了

02.png

验证k8s

03.png
04.png
05.png

加入工作节点

使用这些信息来生成新的join命令

kubeadm token create --print-join-command

在每个工作节点上,运行之前保存的加入命令,例如

# 在工作节点上运行加入命令
$ sudo kubeadm join <Master节点IP>:<Master节点端口> --token <Token> --discovery-token-ca-cert-hash <CA证书哈希值>

$ kubeadm join 192.168.4.6:6443 --token 6n60gw.od78mw7dtoyuz8dn \
--discovery-token-ca-cert-hash sha256:e53b20f5eeb50b5f503da46af84e0c74fe736245d32321176d9a0c0f1a119c9f \
--node-name=192.168.4.7 --v=5

请注意,上述命令中的 、<Master节点IP>、<Master节点端口>、 和 <CA证书哈希值> 都需要根据你的实际情况进行替换。

添加master节点

生成 Join Token

在现有的某个 master 节点上,获取一个用于加入的 token 和 etcd 参数 :

kubeadm init phase upload-certs --upload-certs

这会返回一个证书和一个启动的使用 token。
使用这些信息来生成新的 join 命令

kubeadm token create --print-join-command

加入新的 Master 节点

kubeadm join <master-ip>:<master-port> --token <token> \
    --discovery-token-ca-cert-hash sha256:<hash> \
    --control-plane --certificate-key <certificate-key> \
    --node-name=192.168.4.7 --v=5

验证集群状态

一旦kubeadm join命令成功完成,在新节点上检查kubelet和kubeadm

kubectl get nodes

06.png

0

评论 (0)

取消