☰
二,kubernetes的集群部署
2026/10/10 2:41:59 网站建设 项目流程

kubernets对于操作系统有严格的环境要求,以演示centos7.9为例,前置环境配置需要

零,前置环境

1,系统版本不低于7.5;

否则直接安装失败

cat /etc/redhat-release

2,内部dns连接(或者修改hosts);

改这个文件后也要改相应的主机名字不然后面部署cni生成证书时候会用默认主机名localhost.localdomain,导致notready。如果已经生成证书除非删除重新生成不然只能改

/var/lib/kubelet/kubeadm-flags.env 加上 KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.2 ###加上的--hostname-override=localhost.localdomain"补救(但名字还是默认的)

否则导致节点之间互相找不到对方,集群组建失败

vim /etc/hosts

192.168.109.100 master

192.168.109.101 node1

192.168.109.102 node2

3,时间同步,证书、日志、调度全部依赖时间;

否则证书莫名过期,节点频繁报失联,pod 调度错乱

启动chronyd服务 systemctl start chronyd

设置开机自启 systemctl enable chronyd

等待几秒同步完成,验证系统时间 date

4,关闭firewalld(生产环境则内部另外在kubernetes配置)、iptables;

否则,系统自带防火墙同时工作,两套防火墙规则不兼容,容器之间网络不通,因为kubernetes自己会生成一大堆 iptables 规则用于 Pod、Service 网络转发

关闭firewalld systemctl stop firewalld systemctl disable firewalld

关闭iptables systemctl stop iptables systemctl disable iptables

5、禁用selinux

因为selinux安全政策太过严苛,当然生产环境可以在kubernetes中另外seLinux 策略

vim /etc/selinux/config

修改配置

SELINUX=disabled

重启

reboot

6、关闭swap交换分区

关掉虚拟内存,否则pod调度会出现错误

vim /etc/fstab #注释swap那一行,前面加 # # /dev/mapper/centos-swap swap swap defaults 0 0
7、修改内核参数

开启Linux网卡转发。Pod之间跨机器通信,数据包要宿主机转发。

# 1. 加载 br_netfilter 模块 modprobe br_netfilter # 2. 设置开机自动加载 br_netfilter echo br_netfilter > /etc/modules-load.d/br_netfilter.conf # 3. 创建 sysctl 配置文件(文件不存在就是新建) cat > /etc/sysctl.d/kubernetes.conf <<'EOF' net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF # 4. 重新加载所有 sysctl 配置 sysctl --system # 5. 验证模块和参数 lsmod | grep br_netfilter sysctl net.bridge.bridge-nf-call-ip6tables net.bridge.bridge-nf-call-iptables net.ipv4.ip_forward
8、加载ipvs模块

Service两种模式中ipvs比iptables新,也比它强大

#下载 yum -y install ipset ipvsadm #编写脚本 cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF #给权限然后运行 chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4 #验证 lsmod | grep -e ipvs -e nf_conntrack_ipv4

一,安装

1,安装docker

CentOS镜像-CentOS镜像下载安装-开源镜像站-阿里云

按照教程备份,换源,然后加载缓存(部分mini版本因为没有wget就用curl命令换源)

注意:强烈建议按照你所看到教程版本来,因为k8s对插件间的版本要求很统一,排查很麻烦

#实测结果缺少docker ce源 #重建docker ce源 curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum clean all yum makecache #再安装 yum -y install docker-ce-18.06.3.ce-3.el7 #开启并且设定为自启 systemctl enable docker && systemctl start docker

2,给容器设置加速

登录阿里账号,镜像加速器的功能下面就可以领取一个专属的加速地址。

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{ "registry-mirrors": ["https://分配的.mirror.aliyuncs.com"] }

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

2.1,配置systemd协议与k8s同步

假如你的k8s用了systemd那必须也写入,不然部署时候会报错

{

"registry-mirrors": ["https://1afzgtuo.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"]

}

3,指定一个kubernetes的yum软件安装包源

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

这只是软件安装包的源,拉取的组件还是要另外配置阿里云的源

3.1,指定此版本号部署

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

3.1.1,kubeadm、kubelet、kubectl 分别是什么?
组件作用装在哪里
kubeadm集群初始化工具,用来执行kubeadm init和kubeadm joinMaster 和 Node 都建议装
kubelet节点代理,每个节点上都必须运行,负责启动 Pod 容器Master 和 Node 都必须装
kubectl命令行客户端,用来操作集群,比如kubectl get nodes通常 Master 或运维机装,Node 上可选

继续

3.1.2,让 kubelet 的 cgroup driver 和 Docker 保持一致(都用systemd),否则 kubelet 启动会报错或警告。

设置 kube-proxy 使用 IPVS 模式(可选,性能更好,但需要内核支持)

修改"/etc/sysconfig/kubelet"文件的内容:

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"##docker也用的是systemd
KUBE_PROXY_MODE="ipvs"##ipvs效果更好更强大

3.2查看k8s所需镜像

kubeadm config images list

#自动发现我们用的是旧版1.18,所以它不给让我们推荐新版1.37的组件。

注意这里镜像源还是国外的k8s.gcr.io,后面要解决这个国外源慢的问题,可以走代理或者魔法,但很麻烦需要宿主机与虚拟机两方面的网络配置,所以这里我们使用阿里的或者国内大神的镜像源。

3.3,部署master节点

kubeadm init \

--apiserver-advertise-address=192.168.75.100 \ ##你的master主机的地址

--image-repository registry.aliyuncs.com/google_containers \ ##大神的阿里仓库,华为的不登陆没有密匙拉取不了

--kubernetes-version v1.18.2 \ ##你所下的kubernetes版本这里是1.18

--service-cidr=10.96.0.0/12 \ ##默认网络地址段

--pod-network-cidr=10.244.0.0/16 ##默认网络地址段

3.3.1,排查问题

假如部署失败 ,极大可能是之前的环境错误,或者是镜像仓库的问题

#查看日志后100行看问题

journalctl -xeu kubelet --no-pager | tail -n 100

找教程重新配置然后清除失败的初始化

kubeadm reset -f
rm -rf $HOME/.kube
rm -rf /etc/kubernetes/manifests/*.yaml
rm -rf /etc/kubernetes/pki
rm -rf /var/lib/etcd/*
systemctl restart kubelet

成功部署

3.4,按照提示配置 kubectl

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

3.5,用哈希密匙加入节点node

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.75.100:6443 --token fb6hcj.xpr2an8bnkdgvk9z \
--discovery-token-ca-cert-hash sha256:79536a09c8282fe282978c294768f51a889e14312231c95d2e822e6f19dd806a

此密匙有效期是2小时,可以生成永久密匙
kubeadm token create --ttl 0 --print-join-command

验证node是否加入集群
kubectl get nodes

notready是因为没有部署CNI网络插件

3.6,CNI网络插件

魔法获取一个kube-flannel.yml

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ##获取配置

kubectl get pods -n kube-system #查看状态

这个我搞了很久网络很难搞,这里我提出一套行之有效的流程。/etc/sysctl.d/kubernetes.conf一定不要有问题

下载一个kube-flannel.yml(一个compose)

一次性替换为华为云 SWR 源(已确认同步了 v0.28.9)

# 替换 flannel 主镜像 sed -i 's#m.daocloud.io/docker.io/flannel/flannel:#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/flannel-io/flannel:#g' /root/kube-flannel.yml # 替换 CNI 插件镜像 sed -i 's#rancher/mirrored-flannel-flannel-cni-plugin:#swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/flannel-io/flannel-cni-plugin:#g' /root/kube-flannel.yml
grep "image:" /root/kube-flannel.yml

正确结果:

image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/flannel-io/flannel:v0.28.9
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/flannel-io/flannel-cni-plugin:v1.9.1-flannel3
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/flannel-io/flannel:v0.28.9

#部署

kubectl apply -f /root/kube-flannel.yml kubectl get pods -n kube-flannel -o wide --watch

kubectl get nodes -o wide#查看各个节点状态

成功

确认 Flannel Pod 全部 Running

kubectl get pods -n kube-flannel -o wide

确认 CoreDNS 也起来了

kubectl get pods -n kube-system

检查网卡(Master 节点执行):

ip link show | grep -E "flannel|cni0"

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询