K8s安装Flannel版本v1.0
环境 debian13.3 x86
HOSTNAME=test
1 基础环境
1.1 安装基础工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg2 lsb-release apt-transport-https ca-certificates curl
1.2 禁止使用交换空间
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
1.3 修改主机名称和时区
注意:k8s只支持小写主机名称,如果不是单机管理,要注意多节点主机名称不能一致
sudo hostnamectl set-hostname $HOSTNAME
sudo timedatectl set-timezone Asia/Shanghai
sudo systemctl restart systemd-timesyncd.service
1.4 开启流量转发
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
应用:
sudo sysctl --system
1.5 镜像配置
将下面的加入到文件/etc/docker/daemon.json里面
"registry-mirrors": [
"https://registry.cn-hangzhou.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com",
"https://docker.1panel.live",
"https://hub.littlediary.cn",
"https://docker.kejilion.pro",
"https://docker.1ms.run",
"https://lispy.org",
"https://docker.xiaogenban1993.com",
"https://docker.xuanyuan.me",
"https://docker.mybacc.com",
"https://docker-0.unsee.tech",
"https://dockerpull.cn",
"https://docker.hpcloud.cloud",
"https://docker.m.daocloud.io",
"https://docker.unsee.tech",
"http://mirrors.ustc.edu.cn",
"https://docker.chenby.cn",
"http://mirror.azure.cn",
"https://dockerpull.org",
"https://dockerhub.icu",
"https://hub.rat.dev",
"https://mirror.iscas.ac.cn",
"https://ccr.ccs.tencentyun.com",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi"
]
sudo systemctl daemon-reload && sudo systemctl restart docker
2 安装容器运行时
(1)首先检查是否存在containerd,使用containerd -v查看.
情况1:存在,直接配置
containerd -v
containerd github.com/containerd/containerd v1.7.25 bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
情况2:不存在,下载
wget https://github.com/containerd/containerd/releases/download/v2.2.0/containerd-2.2.0-linux-amd64.tar.gz
sudo tar Cxzvf /usr/local containerd-2.2.0-linux-amd64.tar.gz
wget https://raw.githubusercontent.com/containerd/containerd/v2.2.0/containerd.service
sudo mv containerd.service /usr/lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now containerd
(2)然后配置容器运行时
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml && \
grep 'SystemdCgroup' -B 11 /etc/containerd/config.toml
# 使用 sed 替换镜像源
sudo sed -i 's|registry.k8s.io/pause:3.10.1|registry.aliyuncs.com/google_containers/pause:3.10.1|g' /etc/containerd/config.toml
sudo systemctl daemon-reload
sudo systemctl restart containerd.service
3.安装runc
首先查看是否存在runc,使用 runc -v,存在则跳过,否则使用下面的下载
https://github.com/opencontainers/runc/releases
sudo chmod +x runc.amd64
sudo mv runc.amd64 /usr/bin/runc
查看runc版本号
runc -v
4 安装k8s组件
4.1 添加密钥
# 添加 Kubernetes 签名密钥
sudo curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kubernetes-apt-keyring.gpg
# 添加 Kubernetes 仓库
sudo echo 'deb [signed-by=/etc/apt/trusted.gpg.d/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
4.2 安装
# 安装kubeadm、kubectl、kubelet
sudo apt update
sudo apt install kubelet=1.34.* kubeadm=1.34.* kubectl=1.34.*
sudo apt-mark hold kubelet kubeadm kubectl
4.3 初始化集群
主节点才做
普通用户登录
mkidr -p /home/$USER/k8s
cd /home/$USER/k8s/
设置配置文件
tee kubeadm-config.yaml << EOF
apiVersion: kubeadm.k8s.io/v1beta4
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: $(hostname -I | awk '{print $1}')
bindPort: 6443
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock
---
apiVersion: kubeadm.k8s.io/v1beta4
kind: ClusterConfiguration
kubernetesVersion: v1.34.8
imageRepository: registry.aliyuncs.com/google_containers
controlPlaneEndpoint: "$(hostname -I | awk '{print $1}'):6443"
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: "10.96.0.0/12"
EOF
初始化集群:
sudo kubeadm config images pull --config=kubeadm-config.yaml
sudo kubeadm init --config=kubeadm-config.yaml --upload-certs
5 安装网络插件
mkidr -p /home/$USER/k8s/cni
cd /home/$USER/k8s/cni
curl https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
kubectl apply -f kube-flannel.yml
6 单节点管理
删除污染节点
首先查看是否存在,存在则删除
kubectl describe node csnt | grep Taints
kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane:NoSchedule-
没有报错就是安装完成了,如果存在,结果如下:
root@csnt:/home/csnt/k8s# kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-flannel kube-flannel-ds-xvm2m 1/1 Running 0 16h
kube-system coredns-7cc97dffdd-4nt4r 1/1 Running 0 17h
kube-system coredns-7cc97dffdd-pm5l9 1/1 Running 0 17h
kube-system etcd-csnt 1/1 Running 0 17h
kube-system kube-apiserver-csnt 1/1 Running 0 17h
kube-system kube-controller-manager-csnt 1/1 Running 0 17h
kube-system kube-proxy-7fwzn 1/1 Running 0 17h
kube-system kube-scheduler-csnt 1/1 Running 0 17h
如果存在失败,一般是镜像下载不下来,可以的操作是使用doker pull下来,然后在加载安装,例如:
docker pull nginx:latest
docker save nginx:latest -o nginx.tar
sudo ctr -n k8s.io image import nginx.tar
7 多节点管理
需要同样的执行章节1 2 3 4 (4章节排除4.3),5 6 章节也不做
然后获取主节点的加入指令(在主节点执行)
kubeadm token create --print-join-command
然后在从节点执行获取到的指令