k8s-v1.23.17部署
·
参考链接:kubeadm安装-官网
一、环境
1. 环境参考
硬件配置: 2core 4GB
磁盘: 100GB+ [系统盘]
磁盘b: 300GB [Rook待用]
磁盘C: 500GB [Rook待用]
磁盘D: 1TB [Rook待用]
操作系统: Ubuntu 22.04.04 LTS
IP和主机名:
10.0.0.231 master231
10.0.0.232 worker232
10.0.0.233 worker233
所有节点能够上网,机器必须"干净"。
组件及版本:
calico:v3.32.0
kube-apiserver:v1.23.17
kube-proxy:v1.23.17
kube-controller-manager:v1.23.17
kube-scheduler:v1.23.17
coredns:1.8.6
etcd:3.5.6-0
pause:3.6
温馨提示:
虚拟机的windows宿主机存储路径磁盘最少保证200GB剩余空间。
2. 环境配置
#1. 关闭swap分区
swapoff -a && sysctl -w vm.swappiness=0 # 临时关闭
sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab # 基于配置文件关闭
#2. 确保各个节点MAC地址或product_uuid唯一
ifconfig eth0 | grep ether | awk '{print $2}'
cat /sys/class/dmi/id/product_uuid
#3. 检查网络节点是否互通
简而言之,就是检查你的k8s集群各节点是否互通,可以使用ping命令来测试。
ping baidu.com -c 10
#4. 允许iptable检查桥接流量
cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | 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
EOF
sysctl --system
#5. 检查端口是否被占用
参考链接: [官网端口参考](https://kubernetes.io/zh-cn/docs/reference/networking/ports-and-protocols/)
检查master节点和worker节点的各组件端口是否被占用。
#6. 所有节点修改cgroup的管理进程为systemd
- 安装doker环境
wget http://192.168.21.253/Resources/Docker/scripts/oldboyedu-autoinstall-docker-docker-compose.tar.gz
tar xf oldboyedu-autoinstall-docker-docker-compose.tar.gz
./install-docker.sh i
- 检查cgroup驱动是否是systemd
docker info | grep "Cgroup Driver:" #防止docker与系统驱动不一致,从而信息不对等,可能会导致OOM
#7、所有节点安装kubeadm,kubelet,kubectl
- 你需要在每台机器上安装以下的软件包:
kubeadm:
用来初始化K8S集群的工具。
kubelet:
在集群中的每个节点上用来启动Pod和容器等。
kubectl:
用来与K8S集群通信的命令行工具。
# 如果有安装包的话,直接执行以下操作:
wget http://192.168.21.253/Resources/Kubernetes/softwares/k8s-v1.23.17.tar.gz
tar xf k8s-v1.23.17.tar.gz
cd var/cache/apt/archives/ && dpkg -i *.deb
# 没有的话,执行以下操作:
- K8S所有节点配置软件源(拷贝执行2次)【备选】
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
- 查看一下当前环境支持的k8s版本【备选】
[root@master231 ~]# apt-cache madison kubeadm
kubeadm | 1.28.2-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
kubeadm | 1.28.1-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
kubeadm | 1.28.0-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
...
kubeadm | 1.23.17-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
kubeadm | 1.23.16-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
kubeadm | 1.23.15-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
kubeadm | 1.23.14-00 | https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial/main amd64 Packages
...
- 所有节点安装 kubelet kubeadm kubectl
apt-get -y install kubelet=1.23.17-00 kubeadm=1.23.17-00 kubectl=1.23.17-00
- 检查各组件版本
[root@master231 archives]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.17", GitCommit:"953be8927218ec8067e1af2641e540238ffd7576", GitTreeState:"clean", BuildDate:"2023-02-22T13:33:14Z", GoVersion:"go1.19.6", Compiler:"gc", Platform:"linux/amd64"}
[root@master231 archives]#
[root@master231 archives]# kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.17", GitCommit:"953be8927218ec8067e1af2641e540238ffd7576", GitTreeState:"clean", BuildDate:"2023-02-22T13:34:27Z", GoVersion:"go1.19.6", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?
[root@master231 archives]#
[root@master231 archives]# kubelet --version
Kubernetes v1.23.17
参考链接:
[官网kubectl-linux安装](https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-linux/)
8、检查时区
[root@master231 ~]# ln -svf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
'/etc/localtime' -> '/usr/share/zoneinfo/Asia/Shanghai'
[root@master231 ~]#
[root@master231 ~]# ll /etc/localtime
lrwxrwxrwx 1 root root 33 Feb 10 11:26 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai
[root@master231 ~]#
[root@master231 ~]# date -R
Thu, 22 May 2025 10:18:16 +0800
9、验证cpu核心数
[root@master231 ~]# lscpu | grep ^CPU\(s\)
CPU(s): 2
10、拍快照 #我这里是vm环境
二、 基于kubeadmin初始化k8s的master组件
1. 提前导入镜像 #如果自己有用自己的
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.23.17
kube-proxy:v1.23.17
kube-controller-manager:v1.23.17
kube-scheduler:v1.23.17
coredns:1.8.6
etcd:3.5.6-0
pause:3.6
)
for imageName in ${images[@]} ; do
docker pull crpi-eofknyscceuv2bv8.cn-wulanchabu.personal.cr.aliyuncs.com/suxiao3316-study/$imageName
done
EOF
chmod +x ./images.sh && ./images.sh
2、使用kubeadm初始化master节点
[root@master231 ~]# kubeadm init --kubernetes-version=v1.23.17 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.100.0.0/16 --service-cidr=10.200.0.0/16 --service-dns-domain=oldboyedu.com
!!!!!!!!需要将这个页面的token留下,类似于以下:
kubeadm join 10.0.0.10:6443 --token fihcl1.ztgus7ujx4yq3a0u \
--discovery-token-ca-cert-hash sha256:49a669cc8a526d53410b407ad916001b4ca58be9c4b20871ed37e33a957a2106
3、拷贝授权文件,用于管理K8S集群
[root@master231 ~]# mkdir -p $HOME/.kube
[root@master231 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master231 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
4、查看master组件是否正常工作
kubectl get componentstatuses
kubectl get cs
5、查看工作节点
kubectl get nodes
kubectl get no
kubectl get no -o wide
!初始化失败的看这里
master初始化不成功解决问题的方法【可选操作,集群有问题的小伙伴看!没有问题的忽略!!!】
可能存在的原因:
- 由于没有禁用swap分区导致无法完成初始化;----环境配置项未做
- 每个2core以上的CPU导致无法完成初始化;
- 没有手动导入镜像;
解决方案:
- 1.检查上面的是否有上面的情况
free -h
lscpu
- 2.重置当前节点环境
[root@master231 ~]# kubeadm reset -f
- 3.再次尝试初始化master节点
略。
三、基于kubeadm部署worker组件
1、提前导入镜像
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-proxy:v1.23.17
coredns:1.8.6
pause:3.6
)
for imageName in ${images[@]} ; do
docker pull crpi-eofknyscceuv2bv8.cn-wulanchabu.personal.cr.aliyuncs.com/suxiao3316-study/$imageName
done
EOF
2、将worker节点加入到master集群(注意,不要复制我的,而是根据你上一步master生成的token加入集群)
kubeadm join 10.0.0.231:6443 --token nrb0nv.pvw1w3fbskraz3bd \
--discovery-token-ca-cert-hash sha256:2e59d5d84d2fad847601a21917719c93efce1620746da1f48e358a9174c1c152
3、验证worker节点是否加入成功
kubectl get no
kubectl get no -o wide
#看有没有想要加入的节点
#注:这里都肯定是Unready,因为还没有搞网络插件
四、部署CNI插件之Calico
1、获取资源
curl https://raw.githubusercontent.com/projectcalico/calico/v3.32.0/manifests/calico.yaml -O
2、部署
kubectl apply -f calico.yaml --validate=false
kubectl get all -A #用此命令看pod是否都拉起来了
#1、这里取消验证是因为有yaml资源清单里有reason模块(用于注释),这个是在1.24以后才出的
#2、如果之前配了阿里云的镜像加速服务,那这里镜像应该是能拉取到的
3、等待pod全部起来后,检查节点是否就绪
kubectl get nodes -o wide
4、测试cni插件是否正确
cat > cni-test-pods.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-v1
spec:
nodeName: worker232
containers:
- image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
name: xiuxian
---
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-v2
spec:
nodeName: worker233
containers:
- image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
name: xiuxian
EOF
kubectl create -f cni-test-pods.yaml #部署
kubectl get pods -o wide #查看是否就绪
curl [他的IP] #测试
kubectl delete -f cni-test-pods.yaml #测试完成,删除
五、设置自动补全
1、添加环境变量
kubectl completion bash > ~/.kube/completion.bash.inc
echo source '$HOME/.kube/completion.bash.inc' >> ~/.bashrc
source ~/.bashrc
2、验证
kubectl # 连续按2次tab键测试能否出现命令
alpha auth cordon diff get patch run version
annotate autoscale cp drain help plugin scale wait
api-resources certificate create edit kustomize port-forward set
api-versions cluster-info debug exec label proxy taint
apply completion delete explain logs replace top
attach config describe expose options rollout uncordon
更多推荐




所有评论(0)