rockylinux9 安装二进制k8s-1.33的几个关键点
因为之前安装过k8s-1.25这个版本

所以在部署新版本1.33的时候,基本安装方式不变,有几个特别注意的地方标注一下,1.33 版本要求
首先是容器运行时的选择
https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/

这边选择的之前常用的containerd
containerd最新版是2.1 发现阿里云的ACK 也是默认用的2.1版本


https://github.com/containerd/containerd
所以选择用2.1版本之前一定保证你的glibc 库是不小于2.32,推荐新安装用户用Rockylinux 9 最新版,目前是9.6
如果不想安装新系统,直接可以升级系统,这边前面写过一篇升级系统的文章
https://www.cnblogs.com/centos-python/articles/18912627

推荐使用 systemd 驱动来管理 cgroup
https://baijiahao.baidu.com/s?id=1799249210398206218&wfr=spider&for=pc
由于systemd 已经集成了对系统和服务的管理,使用 systemd 驱动程序可以简化容器的资源管理,并且与 Kubernetes 等容器编排工具的集成更加顺畅
后面的kubelet 组件也推荐用systemd的
基础镜像的地址修改成私有地址

基本就这三点
启动文件

用github 官网的这个启动文件就可以了
接下来是kubelet 组件的安装
有几点需要说明
这个是1.25 之前的配置

启动报错
journalctl -u kubelet

这个警告信息表明在启动kubelet时使用了已经被弃用的命令行参数,现在基本都在kubelet-config-file 配置
官网中文参数说明
https://kubernetes.io/zh-cn/docs/reference/config-api/kubelet-config.v1beta1/



启动文件
基本安装1.33 就这几个需要注意的,其它组件按1.25 安装文档安装就行
最后一个关键的点网络插件的安装,延续之前的用cilium,可以不用安装kube-proxy
参考文章:https://www.cnblogs.com/centos-python/articles/14889650.html
生成需要的 etcd secret
kubectl create secret generic -n kube-system cilium-etcd-secrets \
--from-file=etcd-client-ca.crt=/etc/ssl/kubernetes/ca.pem \
--from-file=etcd-client.key=/etc/ssl/kubernetes/kubernetes-key.pem \
--from-file=etcd-client.crt=/etc/ssl/kubernetes/kubernetes.pem
安装命令:当前版本1.17
之前的许多参数已经移除
https://docs.cilium.io/en/v1.15/operations/upgrade/#helm-options

安装参数:
helm install cilium ./ --namespace kube-system --set kubeProxyReplacement=true \
--set k8sServiceHost=k8s-apiserver-vip --set k8sServicePort=8443 --set etcd.enabled=true --set etcd.ssl=true \
--set "etcd.endpoints[0]=https://k8s-etcd-v1:2379" \
--set "etcd.endpoints[1]=https://k8s-etcd-v2:2379" \
--set "etcd.endpoints[2]=https://k8s-etcd-v3:2379" \
--set bandwidthManager.enabled=true \
--set bandwidthManager.bbr=true \
--set routingMode=native \
--set nativeRoutingCIDR=10.0.0.0/8 --set devices='{eno1,eno2}' \
--set hubble.ui.enabled=true --set hubble.relay.enabled=true \
--set hubble.ui.frontend.server.ipv6.enabled=false \
--set installNoConntrackIptablesRules=true \
--set autoDirectNodeRoutes=true \
--set ipv4NativeRoutingCIDR=10.0.0.0/8 --set bpf.masquerade=true --set localRedirectPolicy=true
重点说明一下
--set routingMode=native 直接路由模式,性能提升
--set devices='{eno1,eno2,eno3}'
--set devices='{bond+,eno+,ens+}'
如果不指定,会随机一个网卡去做bpf,到时主机节点只能访问这个网卡网段,为了实现主机不同网段的通信,需要加入所有可用的物理网卡名称
如果没有的网卡名称会报错
还有一点需要注意权限问题RBAC 权限问题
error: unable to upgrade connection: Forbidden (user=kubernetes, verb=create, resource=nodes, subresource=proxy)
```因此需要确保传递给 apiserver 的--kubelet-client-certificate 和--kubelet-client-key
这个证书的"CN": "kubernetes" 下面具有下面的权限属性:
```
verb=*, resource=nodes, subresource=proxy
verb=*, resource=nodes, subresource=stats
verb=*, resource=nodes, subresource=log
verb=*, resource=nodes, subresource=spec
verb=*, resource=nodes, subresource=metrics
系统已经存在一个system:kubelet-api-admin角色,该角色权限较高,在master客户端运行下面命令绑定角色权限即可:
kubectl create clusterrolebinding kubelet-admin --clusterrole=system:kubelet-api-admin --user=kubernetes(不推荐)
最好根据需要创建一个低权限的ClusterRole: 只能贴图了,复制上去格式有问题,这博客都不想用了,我们公司文档都是MD


kubectl exec -it -n kube-system cilium-6tl7m -- cilium status 可以看到支持直接路由和ebpf 这样性能会很高,比默认的隧道模式高很多

有兴趣的同学了解一下这个网络插件
https://mp.weixin.qq.com/s/NrlxI5uMqQQ3sDrrPSKhZA
https://segmentfault.com/a/1190000040053231
https://mp.weixin.qq.com/s/StqzchIMRnzW0gA6TS73KQ

浙公网安备 33010602011771号