跳转至
首页 解决方案 下载 文档
演示环境

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
  1. 增加域名解析记录。
    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来实现。

Document