Linux下Kubernetes如何管理容器
导读:Linux下Kubernetes管理容器的核心流程与实践 一、前置准备:安装基础组件 在Linux系统(如Ubuntu、CentOS)上使用Kubernetes管理容器前,需先安装Docker(容器引擎)和Kubernetes核心组件(ku...
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间通信,常用Calico(
kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
)或Flannel(kubectl 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>
实时查看日志。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux下Kubernetes如何管理容器
本文地址: https://pptw.com/jishu/725760.html