Kubernetes日常管理手册¶
Kubernetes集群升级¶
集群升级请以官方文档为准:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/
Kubernetes维护/删除节点¶
如果Kubernetes中的节点需要进行维护或者彻底移除集群,请根据下面步骤进行操作。
- 1.设置Node为不可调度
root@linux-node1:~# kubectl cordon linux-node3.example.com
- 2.检查Node状态,确认是否增加SchedulingDisabled
root@linux-node1:~# kubectl get node
NAME STATUS ROLES AGE VERSION
linux-node1.example.com Ready control-plane 2d17h v1.31.4
linux-node2.example.com Ready worker 2d17h v1.31.4
linux-node3.example.com Ready,SchedulingDisabled worker 2d17h v1.31.4
- 3.驱逐该节点上的所有Pod
kubectl drain linux-node3.example.com --force --ignore-daemonsets
- 4.根据需求选择删除节点
root@linux-node1:~# kubectl delete node linux-node3.example.com
Etcd备份和恢复¶
Etcd需要每天使用crontab进行备份。注意etcd Pod中没有ls和date等命令。
- etcd备份案例
kubectl exec -it etcd-k8s-node1.opsany.com -n kube-system -- /bin/sh
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save /var/lib/etcd/etcd-snapshot.db
- etcd恢复案例
kubectl exec -it etcd-k8s-node1.opsany.com -n kube-system -- /bin/sh
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot restore /var/lib/etcd/etcd-snapshot.db
Kubernetes证书轮换¶
kubeadm 会在控制面升级的时候更新所有证书。如果超过1年没有更新过Kubernetes版本,需要手工进行证书替换。
1.检查证书过期时间
该命令显示 /etc/kubernetes/pki 文件夹中的客户端证书以及 kubeadm(admin.conf、controller-manager.conf 和 scheduler.conf) 使用的 kubeconfig 文件中嵌入的客户端证书的到期时间/剩余时间
kubeadm certs check-expiration
2.更新所有证书
kubeadm certs renew all
3.更新kube config
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Kubernetes 使用Nginx Ingress Control获取用户真实IP¶
kubectl edit configmap ingress-nginx-controller -n ingress-nginx
#在该行下面进行添加
allow-snippet-annotations: "true"
# 添加内容
compute-full-forwarded-for :true
forwarded-for-header: X-Forwarded-For
use-forwarded-headers:true
# 其它有用的设置
max-worker-connections: '65536'
proxy-body-size: 20m
proxy-connect-timeout: '10'
reuse-port: 'true'
server-tokens: 'false'
ssl-redirect: 'false'
upstream-keepalive-timeout: '900'
use-forwarded-headers: 'true'
worker-cpu-affinity: auto
手工在CoreDNS增加域名解析¶
1.请先备份该ConfigMap的内容,放置修改错误后回滚。
kubectl get cm coredns -n kube-system -o yaml > coredns-backup.yaml
- 增加域名解析记录。
kubectl edit cm coredns -n kube-system # 编辑ConfigMap增加 .:53 { errors health { lameduck 5s } ready hosts { 192.168.1.100 www.example.com fallthrough } kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure fallthrough in-addr.arpa ip6.arpa } prometheus :9153 forward . /etc/resolv.conf cache 30 loop reload loadbalance }
修改ConfigMap后,Kubernetes会自动检测到这些更改并重新加载CoreDNS配置,但有时候为了确保更改立即生效,您可能需要手动重启CoreDNS的Pod。这可以通过删除CoreDNS的Pod来实现。