k8s 1.30主要新功能
-
kubelet 重啟后穩健的 VolumeManager 重建(SIG Storage)
-
防止在卷還原過程中未經授權的卷模式轉換(SIG Storage)
-
Pod 調度可用性(SIG Scheduling)
-
PodTopologySpread 中的最小域數(SIG Scheduling)
-
k/k 中的 Go 工作區(SIG Architecture))
-
節點日志查詢(Windows SIG Scheduling)
-
CRD 驗證棘輪(SIG API Machinery)
-
上下文日志記錄(SIG Instrumentation)
-
使 Kubernetes 了解負載均衡行為(SIG Network)
Kubernetes v1.30 的升級、棄用和移除
升級至穩定版 以下是升級至穩定版(也稱為正式發布版)的所有功能列表。有關包括新功能和從 alpha 到 beta 的升級的完整更新列表,請查閱發布說明。
此版本包含了共 17 個功能的升級至穩定版:
- 基于容器資源的 Pod 自動伸縮:https://kep.k8s.io/1610
- 刪除云控制器管理器(KCCM)中的臨時節點謂詞:https://kep.k8s.io/3458
- k/k 采用 Go 的 workspace 架構:https://kep.k8s.io/4402
- 減少基于 Secret 的 ServiceAccount 令牌:https://kep.k8s.io/2799
- 用于準入控制的 CEL:https://kep.k8s.io/3488
- 基于 CEL 的準入控制的匹配條件:https://kep.k8s.io/3716
- Pod 調度準備就緒:https://kep.k8s.io/3521
- PodTopologySpread 中的最小域:https://kep.k8s.io/3022
- 阻止在卷恢復期間發生未授權的卷模式轉換:https://kep.k8s.io/3141
- API Server 鏈路追蹤:https://kep.k8s.io/647
- 云上雙棧 - – node - ip 的處理:https://kep.k8s.io/3705
- AppArmor 支持:https://kep.k8s.io/24
- kubelet 重啟后穩定重建 VolumeManager:https://kep.k8s.io/3756
- kubectl 交互式刪除:https://kep.k8s.io/3895
- 指標基準配置:https://kep.k8s.io/2305
- 為 Pod 添加 status.hostIPs 字段:https://kep.k8s.io/2681
- 聚合資源 API 發現:https://kep.k8s.io/3352
棄用和移除:
- 自 v1.27 版本起,已移除對 SecurityContextDeny 準入插件的支持,并標記為棄用。(SIG Auth、SIG Security 和 SIG Testing)
- 隨著 SecurityContextDeny 準入插件的移除,建議使用自 v1.25 版本起可用的 Pod Security Admission 插件。
一、環境準備
1.1、服務器信息
IP地址 | 角色 | CPU/內存 | 主機名 | 操作系統 |
---|---|---|---|---|
192.168.110.8 | master | 4c/4G | master | CentOS 7.6 |
192.168.110.9 | node1 | 4c/4G | node1 | CentOS 7.6 |
1.2、ip和主機名解析
$ cat /etc/hosts192.168.110.8 master
192.168.110.9 node1
1.3、關閉防火墻和selinux
$ systemctl stop firewalld && systemctl disable firewalld$ setenforce 0$ sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
1.4、禁用swap分區
$ swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab
1.5、修改內核參數并加載
#開啟ipv4轉發
$ cat >> /etc/sysctl.d/k8s.conf << EOF
vm.swappiness=0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF$ modprobe br_netfilter && modprobe overlay && sysctl -p /etc/sysctl.d/k8s.conf
注:其中1.2 - 1.5在所有節點進行操作
二、安裝docker
k8s在 v1.24及以上版本由于棄用dockershim后,無法直接使用docker,需要安裝cri-docker,推薦直接使用containerd,這里由于個人習慣問題,部署docker+cri-docker配合使用
2.1、安裝docker
$ yum install -y yum-utils device-mapper-persistent-data lvm2$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo$ yum install -y docker-ce$ systemctl start docker && systemctl enable docker
2.2、配置daemon.json
#主要設置驅動為systemd,systemd在資源緊張的情況下比cgroups更加穩定
$ cat /etc/docker/daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["http://hub-mirror.c.163.com/","https://docker.mirrors.ustc.edu.cn/","https://fz5yth0r.mirror.aliyuncs.com","https://registry.docker-cn.com"],"data-root":"/var/lib/docker","storage-driver": "overlay2","log-driver": "json-file","log-opts": {"max-size": "100m","max-file": "3"}
}
2.3、安裝cri-docker
$ curl -LO https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.13/cri-dockerd-0.3.13-3.el7.x86_64.rpm$ rpm -ivh cri-dockerd-0.3.13-3.el7.x86_64.rpm#驗證版本
$ cri-dockerd --version#啟動服務
$ systemctl start cri-docker && systemctl enable cri-docker
三、部署、配置k8s
3.1、配置yum源
$ cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.30/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF#更新yum緩存
$ yum clean all && yum makecache
3.2、安裝kubectl等組件
$ yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
$ systemctl enable --now kubelet
3.3、整合kubelet和cri-docker
#修改/usr/lib/systemd/system/cri-docker.service文件的ExecStart字段
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib/cni/cache --cni-conf-dir=/etc/cni/net.d#重啟cri-dockerd服務
$ systemctl daemon-reload && systemctl restart cri-docker#配置kubelet服務, 修改/etc/sysconfig/kubelet文件的KUBELET_KUBEADM_ARGS字段
KUBELET_KUBEADM_ARGS="--container-runtime-endpoint=/run/cri-dockerd.sock"
3.4、預拉取鏡像
$ kubeadm config images pull --cri-socket unix:///var/run/cri-dockerd.sock --image-repository registry.aliyuncs.com/google_containers
3.5、kubeadm初始化集群
$ kubeadm init \
--apiserver-advertise-address=192.168.110.8 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.30.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl=0 \
--upload-certs \
--cri-socket unix:///var/run/cri-dockerd.sock#輸出如下
====================================================================
Your Kubernetes control-plane has initialized successfully!To start using your cluster, you need to run the following as a regular user:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configAlternatively, if you are the root user, you can run:export KUBECONFIG=/etc/kubernetes/admin.confYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.110.8:6443 --token t9zogk.j7sak404br83rdqq \--discovery-token-ca-cert-hash sha256:db17d1cb5bbb30e7ad2e7876b89365053d017c765f9b081e5a1e16249db13eb7
提示registry.k8s.io/pause:3.9
鏡像未找到
解決方案:
$ docker pull registry.aliyuncs.com/google_containers/pause:3.9$ docker tag registry.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.9
3.4、安裝網絡插件
$ kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
3.5、負載節點加入集群
$ kubeadm join 192.168.110.8:6443 --token t9zogk.j7sak404br83rdqq --discovery-token-ca-cert-hash sha256:db17d1cb5bbb30e7ad2e7876b89365053d017c765f9b081e5a1e16249db13eb7 --cri-socket unix:///var/run/cri-dockerd.sock#驗證集群:
[root@master ~]# kubectl get no
NAME STATUS ROLES AGE VERSION
master Ready control-plane 17m v1.30.0
node1 Ready <none> 2m2s v1.30.0
四、部署dashboard
由于新版本dashboard都使用helm進行安裝,先需要安裝helm
4.1、helm安裝
$ wget -c https://get.helm.sh/helm-v3.14.4-linux-amd64.tar.gz
$ tar zxvf helm-v3.14.4-linux-amd64.tar.gz
$ cp linux-amd64/helm /usr/local/bin/
4.2、部署dashboard
$ helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
$ helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard
4.3、修改svc為nodeport
$ kubectl edit svc -n kubernetes-dashboard kubernetes-dashboard-kong-proxy#字段 type: NodePort
4.4、獲取token
$ kubectl -n kubernetes-dashboard create token dashboard-admin