





















已经2024年了, k8s已经更新到 1.30.x的版本了,但是还有很多公司还在使用1.17.9版本,那么我们今天就来手动安装一下1.17.9版本的k8s。
我们在测试centos服务器192.168.40.1安装单节点 Kubernetes 集群(Master 节点)使用 kubeadm 是一个相对直接的过程。
1sudo hostnamectl set-hostname k8s
2echo "192.168.40.1 k8s" | sudo tee -a /etc/hosts
1bash <(curl -sSL https://linuxmirrors.cn/main.sh)
1sudo setenforce 0
2sudo sed -i --follow-symlinks 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
1sudo swapoff -a
2sudo sed -i '/swap/d' /etc/fstab
1# 如果有配置,则修改
2sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
3sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
4sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
5sed -i "s#^net.ipv6.conf.all.disable_ipv6.*#net.ipv6.conf.all.disable_ipv6=1#g" /etc/sysctl.conf
6sed -i "s#^net.ipv6.conf.default.disable_ipv6.*#net.ipv6.conf.default.disable_ipv6=1#g" /etc/sysctl.conf
7sed -i "s#^net.ipv6.conf.lo.disable_ipv6.*#net.ipv6.conf.lo.disable_ipv6=1#g" /etc/sysctl.conf
8sed -i "s#^net.ipv6.conf.all.forwarding.*#net.ipv6.conf.all.forwarding=1#g" /etc/sysctl.conf
9# 可能没有,追加
10echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
11echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
12echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
13echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
14echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf
15echo "net.ipv6.conf.lo.disable_ipv6 = 1" >> /etc/sysctl.conf
16echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
17# 执行命令以应用
18sysctl -p
因为k8s 1.17.9 不适用于高版本docker,所以我们要下载指定版本的docker
1sudo yum remove docker*
2sudo yum install -y yum-utils
3#配置docker yum 源
4sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5#安装docker 19.03.9
6yum install -y docker-ce-3:19.03.9-3.el7.x86_64 docker-ce-cli-3:19.03.9-3.el7.x86_64 containerd.io
7
8#启动服务
9systemctl start docker
10systemctl enable docker
11
12sudo systemctl daemon-reload
13sudo systemctl restart docker
由于国内访问 k8s.gcr.io 仓库速度较慢或被阻止,您可以使用国内的镜像源来替代这些镜像地址。以下是一个解决方案,使用阿里云的镜像源来替代默认的 k8s.gcr.io 镜像源。
1# 拉取阿里云的镜像
2sudo docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.17.9
3sudo docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.17.9
4sudo docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.17.9
5sudo docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.17.9
6sudo docker pull registry.aliyuncs.com/google_containers/pause:3.1
7sudo docker pull registry.aliyuncs.com/google_containers/etcd:3.4.3-0
8sudo docker pull registry.aliyuncs.com/google_containers/coredns:1.6.5
9
10# 重新标记镜像
11sudo docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.17.9 k8s.gcr.io/kube-apiserver:v1.17.9
12sudo docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.17.9 k8s.gcr.io/kube-controller-manager:v1.17.9
13sudo docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.17.9 k8s.gcr.io/kube-scheduler:v1.17.9
14sudo docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.17.9 k8s.gcr.io/kube-proxy:v1.17.9
15sudo docker tag registry.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
16sudo docker tag registry.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
17sudo docker tag registry.aliyuncs.com/google_containers/coredns:1.6.5 k8s.gcr.io/coredns:1.6.5
1cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
2[kubernetes]
3name=Kubernetes
4baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
5enabled=1
6gpgcheck=1
7repo_gpgcheck=1
8gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
9EOF
1sudo yum install -y kubelet-1.17.9 kubeadm-1.17.9 kubectl-1.17.9 --disableexcludes=kubernetes
2sudo systemctl enable --now kubelet
注意: 接下来的步骤有所不同,如果你是初始化集群,继续跟着文档操作,如果你在已有集群的情况下,请跳到加入集群
1sudo kubeadm init --kubernetes-version=v1.17.9 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.40.1
1mkdir -p $HOME/.kube
2sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
3sudo chown $(id -u):$(id -g) $HOME/.kube/config
这里由于版本关系,不能下载最新的flannel,所以我们下载低版本的flannel
1# 拉取 Flannel 镜像
2sudo docker pull quay.io/coreos/flannel:v0.12.0-amd64
3
4# 重新标记 Flannel 镜像
5sudo docker tag quay.io/coreos/flannel:v0.12.0-amd64 quay.io/coreos/flannel:v0.12.0-amd64
创建 Flannel 配置文件
1wget https://raw.githubusercontent.com/coreos/flannel/v0.12.0/Documentation/kube-flannel.yml
2kubectl apply -f kube-flannel.yml
在主节点上执行kubeadm token create --print-join-command 命令,获取加入集群的命令,然后在其他节点上执行该命令,即可加入集群。
1kubeadm token create --print-join-command
在你需要加入集群的节点上执行该命令,即可加入集群。
创建 /etc/cni/net.d 目录
下载 flannel 配置文件
1cd /tmp
2curl -L -o flannel.tgz https://github.jobcher.com/gh/https://github.com/flannel-io/cni-plugin/releases/download/v1.1.2/cni-plugin-flannel-windows-amd64-v1.1.2.tgz
3tar -xzvf flannel.tgz -C /opt/cni/bin
4sudo ln -s /opt/cni/bin/flannel-amd64 /opt/cni/bin/flannel
5ls -l /opt/cni/bin/flannel
重启 kubelet 服务
1sudo systemctl daemon-reload
2sudo systemctl restart kubelet
查看节点状态:
查看所有 Pod 状态:
执行systemctl status kubelet 查看 kubelet 服务状态
发现[failed to find plugin "flannel" in path [/opt/cni/bin]]
1● kubelet.service - kubelet: The Kubernetes Node Agent
2 Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
3 Drop-In: /usr/lib/systemd/system/kubelet.service.d
4 └─10-kubeadm.conf
5 Active: active (running) since Fri 2025-08-29 10:26:22 CST; 12min ago
6 Docs: https://kubernetes.io/docs/
7 Main PID: 31569 (kubelet)
8 Tasks: 20
9 Memory: 38.6M
10 CGroup: /system.slice/kubelet.service
11 └─31569 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=cgroupfs --network-plugin=cni --pod-in...
12
13Aug 29 10:38:24 dev-nbsj-node2-174 kubelet[31569]: "type": "portmap",
14Aug 29 10:38:24 dev-nbsj-node2-174 kubelet[31569]: "capabilities": {
15Aug 29 10:38:24 dev-nbsj-node2-174 kubelet[31569]: "portMappings": true
16Aug 29 10:38:24 dev-nbsj-node2-174 kubelet[31569]: }
17Aug 29 10:38:24 dev-nbsj-node2-174 kubelet[31569]: }
18Aug 29 10:38:24 dev-nbsj-node2-174 kubelet[31569]: ]
19Aug 29 10:38:24 dev-nbsj-node2-174 kubelet[31569]: }
20Aug 29 10:38:24 dev-nbsj-node2-174 kubelet[31569]: : [failed to find plugin "flannel" in path [/opt/cni/bin]]
21Aug 29 10:38:24 dev-nbsj-node2-174 kubelet[31569]: W0829 10:38:24.012395 31569 cni.go:237] Unable to update cni config: no valid networks found in /etc/cni/net.d
22Aug 29 10:38:25 dev-nbsj-node2-174 kubelet[31569]: E0829 10:38:25.817847 31569 kubelet.go:2184] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is...ig uninitialized
在新节点安装 CNI 插件时,要确保包含 flannel:
1cd /tmp
2curl -L https://github.jobcher.com/gh/https://github.com/flannel-io/cni-plugin/releases/download/v1.1.0/flannel-amd64 -o /opt/cni/bin/flannel
3chmod +x /opt/cni/bin/flannel
确认文件存在
重启 kubelet 服务
1systemctl restart kubelet
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。