背景

公司使用的是交老的k8s版本(1.16),由于老版本的K8s对于现在很多新特性不支持,所以需要升级到新版本。目前2023年7月11日最新版本的k8s是v1.27.3。通过参考官方文档进行k8s部署工作。其中涉及到操作系统配置、防火墙配置、私有镜像仓库等。
推荐一个AI工具:态灵AI: chatai.taigoodai.com

环境

操作系统:centos7.9
机器:1个master 和 1个node 节点

安装

设置系统
# 所有机器设置hostname
hostnamectl set-hostname  master1
hostnamectl set-hostname  node1

# 所有机器增加内网ip和 master1 对应关系
vi /etc/hosts

如:
master1 192.168.1.1
node1 192.168.1.3
关闭防火墙
# 注意,如果不关闭防火墙,需要将kubernates所有端口放行
sudo systemctl stop firewalld.service 
sudo systemctl disable firewalld.service
设置机器同步

可使用ntpdate,如果是各大厂的云服务器,也可以不设置,云服务器已设置好

关闭交换空间
sudo swapoff -a
sudo sed -i 's/.*swap.*/#&/' /etc/fstab
关闭selinux
getenforce
cat /etc/selinux/config
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat /etc/selinux/config
使用阿里云的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
# 是否检查 gpg 签名文件
gpgcheck=0
# 是否检查 gpg 签名文件
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
配置网桥
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
vm.swappiness = 0
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1

EOF

# 应用 sysctl 参数而不重新启动
sudo sysctl --system
安装containerd

由于新的Kubernates [1.24.0以上] 建议使用contanerd, 而且kubernates如何使用containerd 不会像使用docker一样,要中间转几层,故其性能很好。大概CPU使用率减少60%,内存使用率能减少12%。


wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum install -y containerd.io containerd

sudo systemctl stop containerd.service

sudo containerd config default > /etc/containerd/config.toml
sudo sed -i "s#registry.k8s.io/pause#registry.cn-hangzhou.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml

# 更改/etc/containerd/config.toml  ,disabled_plugins 中删除 cri
vi /etc/containerd/config.toml
sudo sed -i "s#SystemdCgroup = false#SystemdCgroup = true#g" /etc/containerd/config.toml

sudo systemctl enable --now containerd.service
sudo systemctl status containerd.service

sudo modprobe br_netfilter

安装k8s
sudo yum install -y kubelet-1.27.3-0 kubeadm-1.27.3-0 kubectl-1.27.3-0 --disableexcludes=kubernetes --nogpgcheck
sudo systemctl daemon-reload
sudo systemctl restart kubelet
sudo systemctl enable kubelet
初始化k8s master节点
kubeadm init --image-repository=registry.aliyuncs.com/google_containers 

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

# 让master参与服务调度,不做control-plane
kubectl taint node master1 node-role.kubernetes.io/control-plane-
kubectl label node master1 kubernetes.io/role=master

sudo  crictl config runtime-endpoint unix:///var/run/containerd/containerd.sock

增加k8s worker节点

利用上一步中 kubeadm init后产生的命令在work节点中执行

kubeadm join 172.16.64.9:6443 --token token.fake  --discovery-token-ca-cert-hash sha256:fake 	
安装calico网络插件
wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml
# 修改 calico.yaml 文件
vim calico.yaml
# 在 - name: CLUSTER_TYPE 下方添加如下内容
- name: CLUSTER_TYPE
  value: "k8s,bgp"
  # 下方为新增内容
- name: IP_AUTODETECTION_METHOD
  value: "interface=网卡名称"
# 例如:- name: IP_AUTODETECTION_METHOD
# 例如:  value: "interface=eth0" 可使用通配符,例如:interface="eth.*|en.*"


kubectl apply -f calico.yaml
查看集群状态
kubectl cluster-info
kubectl get nodes
kubectl get pods -A -o wide

常用命令

containerd命令

# 查看镜像
ctr image list
或者
crictl images
 
# 拉取镜像, 分为非k8s容器用 和 k8s容器用。一定要加上--all-platforms
ctr i pull --all-platforms registry.xxxxx/pause:3.2
ctr -n k8s.io i pull --all-platforms registry.aliyuncs.com/google_containers/pause:3.2
或者,要登录的harbor
ctr i pull --user user:passwd --all-platforms registry.aliyuncs.com/google_containers /pause:3.2
或者,不推荐,没有 --all-platforms
crictl pull --creds user:passwd registry.aliyuncs.com/google_containers /pause:3.2

# 镜像打tag
镜像标记tag
ctr -n k8s.io i tag registry.xxxxx/pause:3.2 k8s.gcr.io/pause:3.2
或者 强制覆盖
ctr -n k8s.io i tag --force registry.xxxxx/pause:3.2 k8s.gcr.io/pause:3.2

# 删除镜像tag
ctr -n k8s.io i rm registry.xxxxx/pause:3.2

# 推送镜像
ctr i push --all-platforms  --user user:passwd registry.xxxxx/pause:3.2
# 导出/保存镜像

ctr -n=k8s.io  i export kube-apiserver:v1.28.0.tar xxxxx.com/kube-apiserver:v1.28.0 --all-platforms

ctr -n=k8s.io  i import kube-apiserver:v1.28.0.tar
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐