溫馨提示×

Linux系統中Kubernetes如何管理

小樊
41
2025-09-23 02:20:55
欄目: 智能運維

Linux系統中Kubernetes管理指南

一、Kubernetes集群部署(Linux環境)

1. 安裝前準備

  • 系統要求:選擇Ubuntu、CentOS等Linux發行版,每節點需≥2核CPU、≥2GB內存、≥30GB硬盤;所有節點需網絡互通,能訪問外網拉取鏡像。
  • 基礎配置:關閉防火墻(systemctl stop firewalld && systemctl disable firewalld)、禁用SELinux(sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0)、關閉swap分區(swapoff -a并注釋/etc/fstab中的swap行);設置主機名與IP對應關系(編輯/etc/hosts文件)。
  • 安裝Docker:Kubernetes依賴Docker作為容器運行時,通過以下命令安裝(以Ubuntu為例):
    sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt update && sudo apt install -y docker-ce
    sudo systemctl enable --now docker
    

2. 安裝Kubernetes核心組件

使用kubeadm(官方推薦工具)、kubelet(節點代理)、kubectl(命令行工具):

sudo apt update && sudo apt install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update && sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl  # 鎖定版本避免自動升級

3. 初始化Master節點

在Master節點執行初始化命令(以指定Pod網絡CIDR為例):

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<Master_IP>

初始化完成后,按提示配置kubectl

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

4. 加入Worker節點

Master節點初始化后會生成kubeadm join命令(包含token和CA證書哈希),在Worker節點執行該命令即可加入集群:

sudo kubeadm join <Master_IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

5. 部署網絡插件

Kubernetes需要網絡插件實現Pod間通信,常用Calico(適合生產環境):

kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml

驗證網絡插件是否正常:

kubectl get pods -n kube-system  # 查看網絡插件Pod是否為Running狀態

二、Kubernetes日常管理

1. 集群狀態檢查

  • 查看節點狀態(需所有節點顯示Ready):
    kubectl get nodes
    
  • 查看集群組件狀態:
    kubectl get componentstatuses
    

2. 應用部署與管理

  • 部署應用:使用Deployment控制器部署Nginx示例:
    kubectl create deployment nginx --image=nginx:latest
    
  • 暴露服務:將Deployment暴露為NodePort類型服務(外部可通過節點IP+端口訪問):
    kubectl expose deployment nginx --port=80 --type=NodePort
    
  • 查看資源狀態
    kubectl get pods          # 查看Pod狀態
    kubectl get svc           # 查看服務狀態
    kubectl describe pod <pod_name>  # 查看Pod詳情(排查問題)
    

3. 常用運維命令

  • 擴縮容:調整Deployment的副本數(如將Nginx副本從1擴至3):
    kubectl scale deployment nginx --replicas=3
    
  • 刪除資源:刪除指定資源(如刪除Nginx Deployment):
    kubectl delete deployment nginx
    
  • 日志查看:查看Pod日志(如查看Nginx Pod日志):
    kubectl logs <pod_name>
    
  • 進入容器:進入Pod內的容器(如進入Nginx容器):
    kubectl exec -it <pod_name> -- /bin/bash
    

三、集群監控與日志管理

1. 監控系統(Metrics)

使用Prometheus+Grafana組合監控集群性能:

  • 部署Prometheus(通過Operator簡化部署):
    kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/master/bundle.yaml
    
  • 部署Grafana并配置Prometheus數據源:
    kubectl apply -f https://raw.githubusercontent.com/grafana/grafana/master/deploy/kubernetes/deployment.yaml
    kubectl apply -f https://raw.githubusercontent.com/grafana/grafana/master/deploy/kubernetes/datasource.yaml
    
  • 訪問Grafana(默認端口3000,賬號admin/admin),導入Kubernetes監控Dashboard(如ID:3119)。

2. 日志管理(Logging)

使用**EFK(Elasticsearch+Fluentd+Kibana)**收集和分析日志:

  • 部署Elasticsearch
    kubectl apply -f https://raw.githubusercontent.com/elastic/elasticsearch-operator/master/deploy/deployment.yaml
    
  • 部署Fluentd(作為DaemonSet收集節點日志):
    kubectl apply -f https://raw.githubusercontent.com/fluent/fluentd-kubernetes-daemonset/master/fluentd-daemonset-elasticsearch.yaml
    
  • 部署Kibana并配置Elasticsearch索引:
    kubectl apply -f https://raw.githubusercontent.com/elastic/kibana/master/deploy/kubernetes/elasticsearch-kibana.yaml
    
  • 訪問Kibana(默認端口5601),創建索引模式(如logstash-*)并查看日志。

四、集群安全配置

1. RBAC(基于角色的訪問控制)

通過RoleRoleBinding限制用戶對資源的訪問權限,例如創建pod-reader角色(允許讀取default命名空間的Pod):

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: alice  # 用戶名(需提前創建)
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

2. 網絡策略(NetworkPolicy)

通過NetworkPolicy限制Pod間的通信,例如禁止所有Pod間的入站流量(默認拒絕):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
spec:
  podSelector: {}  # 選擇所有Pod
  policyTypes:
  - Ingress  # 僅限制入站流量
  - Egress   # 可選:限制出站流量

五、集群升級與維護

1. 升級Kubernetes版本

使用kubeadm升級集群(以升級到v1.28.0為例):

sudo kubeadm upgrade plan v1.28.0  # 檢查升級兼容性
sudo kubeadm upgrade apply v1.28.0  # 執行升級

升級后需重啟kubelet服務:

sudo systemctl restart kubelet

2. 備份與恢復

  • 備份etcd(集群數據存儲):使用etcdctl工具備份etcd數據:
    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 /opt/etcd-backup.db
    
  • 恢復etcd:停止kubelet服務,刪除舊數據目錄,恢復快照:
    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 /opt/etcd-backup.db --data-dir=/var/lib/etcd-new
    

六、自動化管理工具(可選)

  • Ansible:通過Playbook自動化部署Kubernetes集群,減少手動操作:
    git clone https://github.com/kubernetes-sigs/kubespray.git
    cd kubespray
    pip3 install -r requirements.txt
    ansible-playbook -i inventory/mycluster/hosts.yaml cluster.yml
    
  • Helm:Kubernetes包管理器,簡化應用部署(如部署Nginx Ingress Controller):
    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    helm repo update
    helm install my-nginx ingress-nginx/ingress-nginx
    

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女