溫馨提示×

Linux下Kubernetes如何管理容器

小樊
39
2025-10-14 02:05:26
欄目: 智能運維

Linux下Kubernetes管理容器的核心流程與實踐

一、前置準備:安裝基礎組件

在Linux系統(如Ubuntu、CentOS)上使用Kubernetes管理容器前,需先安裝Docker(容器引擎)Kubernetes核心組件(kubelet、kubeadm、kubectl)。

  • Docker安裝:通過系統包管理器安裝Docker(如Ubuntu使用sudo apt install docker.io),并啟動服務(sudo systemctl start docker)。需配置Docker使用systemd作為cgroup驅動(編輯/etc/docker/daemon.json添加{"exec-opts": ["native.cgroupdriver=systemd"]}),確保與Kubernetes兼容。
  • Kubernetes組件安裝:通過包管理器安裝kubelet、kubeadm、kubectl(如Ubuntu使用sudo apt install -y kubelet kubeadm kubectl),并啟用kubelet服務(sudo systemctl enable kubelet)。

二、搭建Kubernetes集群

Kubernetes通過集群架構管理容器,需完成Master節點初始化與Worker節點加入:

  • 初始化Master節點:在Master節點運行sudo kubeadm init --pod-network-cidr=192.168.0.0/16--pod-network-cidr指定Pod網絡CIDR,需與后續網絡插件匹配),初始化完成后,將輸出的kubeadm join命令保存(用于Worker節點加入)。
  • 配置kubectl:Master節點初始化后,執行mkdir -p $HOME/.kube創建kubeconfig目錄,復制admin配置文件(sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config),并修改權限(sudo chown $(id -u):$(id -g) $HOME/.kube/config),使kubectl能訪問集群。
  • 部署網絡插件:Kubernetes需要網絡插件實現Pod間通信,常用Calicokubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml)或Flannelkubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml),插件安裝后需等待網絡就緒。
  • 加入Worker節點:在Worker節點運行Master節點輸出的kubeadm join命令(如sudo kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash <hash>),將節點加入集群。

三、容器編排與管理:核心命令與YAML配置

Kubernetes通過控制器(如Deployment、StatefulSet)和Pod(容器組)管理容器,以下是常用操作:

  • 使用kubectl命令行管理
    • 部署應用:通過kubectl create deployment命令創建Deployment(如kubectl create deployment nginx --image=nginx:latest),Deployment會自動創建Pod并管理其生命周期。
    • 查看資源狀態:使用kubectl get命令查看集群資源(如kubectl get nodes查看節點、kubectl get pods查看Pod、kubectl get deployments查看Deployment)。
    • 擴展應用:通過kubectl scale命令調整Deployment的副本數(如kubectl scale deployment nginx --replicas=3),實現容器橫向擴展。
    • 更新應用:使用kubectl set image命令更新Deployment的鏡像(如kubectl set image deployment/nginx nginx=nginx:1.25),觸發滾動更新(舊Pod逐步替換為新Pod)。
    • 暴露服務:通過kubectl expose命令將Deployment暴露為Service(如kubectl expose deployment nginx --port=80 --type=LoadBalancer),使應用可通過集群IP或外部IP訪問。
  • 使用YAML配置文件管理
    更復雜的場景推薦使用YAML文件定義資源(如Deployment、Service),例如一個Nginx Deployment的YAML文件:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx-container
            image: nginx:latest
            ports:
            - containerPort: 80
    
    通過kubectl apply -f <filename>.yaml命令應用配置,kubectl delete -f <filename>.yaml刪除資源。

四、容器編排進階技巧

  • Pod資源管理:在Pod或Deployment的YAML中定義resources.requests(容器所需資源的最小保證)和resources.limits(容器資源使用的最大限制)(如resources: {requests: {cpu: "500m", memory: "512Mi"}, limits: {cpu: "1", memory: "1Gi"}}),避免資源濫用。
  • 配置與敏感信息管理:使用ConfigMap管理非敏感配置(如應用參數),使用Secret管理敏感信息(如密碼、密鑰)。例如,創建ConfigMap:kubectl create configmap nginx-config --from-file=nginx.conf,在Deployment中掛載:volumes: [{name: nginx-config, configMap: {name: nginx-config}}]。
  • 網絡策略:通過NetworkPolicy定義Pod間的網絡通信規則(如允許同一命名空間下的特定Pod訪問),例如:
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: allow-frontend-to-backend
    spec:
      podSelector:
        matchLabels:
          app: backend
      ingress:
      - from:
        - podSelector:
            matchLabels:
              app: frontend
        ports:
        - protocol: TCP
          port: 8080
    
    該策略允許帶有app: frontend標簽的Pod訪問帶有app: backend標簽的Pod的8080端口。
  • 自動擴展:使用**Horizontal Pod Autoscaler(HPA)**根據CPU或內存使用率自動調整Pod副本數(如kubectl autoscale deployment nginx --cpu-percent=50 --min=1 --max=10),當Pod CPU使用率超過50%時,自動增加副本數(最多10個)。

五、容器生命周期管理

  • 查看容器狀態:使用kubectl get pods查看Pod狀態(Running表示運行中,Pending表示正在調度,Error表示出錯),kubectl describe pod <pod-name>查看Pod詳情(如事件、日志)。
  • 刪除容器:使用kubectl delete pod <pod-name>刪除Pod(若Pod由Deployment管理,刪除后會自動重建),或kubectl delete deployment <deployment-name>刪除Deployment及關聯Pod。
  • 日志查看:使用kubectl logs <pod-name>查看Pod的容器日志(如kubectl logs nginx-pod-12345),kubectl logs -f <pod-name>實時查看日志。

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