🐳 Kubernetes 命令:面向 DevOps 工程师的入门到高级
介绍
Kubernetes,也称为 K8s,是一个强大的开源系统,用于自动化部署、扩展和管理容器化应用程序。无论您是 Kubernetes 新手还是经验丰富的用户,掌握其命令对于高效管理集群都至关重要。本文提供了从入门到高级的 Kubernetes 命令综合指南。
🎯 关键概念
在深入研究命令之前,让我们先回顾一下 Kubernetes 的一些基本概念:
- Pod:最小、最简单的 Kubernetes 对象,代表集群中正在运行的进程的单个实例。
- Node:Kubernetes 中的工作机器,可以是虚拟机,也可以是物理机。
- 命名空间:一种在多个用户之间划分集群资源的方式。
- 部署:管理复制应用程序的更高级别的抽象,确保指定数量的副本正在运行。
- 服务:定义一组逻辑 pod 以及访问它们的策略的抽象。
- ConfigMap 和 Secret:将配置数据注入应用程序的机制。
🏁 初学者命令
1. 集群信息
获取集群信息
kubectl cluster-info
显示集群中运行的 Kubernetes 主服务器和服务的地址。
获取节点
kubectl get nodes
列出集群中的所有节点。
2. 命名空间管理
列出命名空间
kubectl get namespaces
显示集群中的所有命名空间。
创建命名空间
kubectl create namespace my-namespace
创建一个新的命名空间。
删除命名空间
kubectl delete namespace my-namespace
删除指定的命名空间。
3. Pod 管理
列出 Pod
kubectl get pods
kubectl get pods -n my-namespace
列出默认命名空间或指定命名空间中的所有 pod。
描述 Pod
kubectl describe pod my-pod
显示有关特定 pod 的详细信息。
创建 Pod
kubectl run my-pod --image=nginx
创建运行指定容器镜像的新 pod。
删除 Pod
kubectl delete pod my-pod
删除指定的 pod。
4.部署管理
列出部署
kubectl get deployments
kubectl get deployments -n my-namespace
列出默认命名空间或指定命名空间中的所有部署。
创建部署
kubectl create deployment my-deployment --image=nginx
使用指定的容器映像创建新的部署。
删除部署
kubectl delete deployment my-deployment
删除指定的部署。
5.服务管理
列表服务
kubectl get services
kubectl get services -n my-namespace
列出默认命名空间或指定命名空间中的所有服务。
创建服务
kubectl expose deployment my-deployment --type=LoadBalancer --name=my-service
创建新服务来公开部署。
删除服务
kubectl delete service my-service
删除指定的服务。
🚀 中级命令
1. ConfigMap 和 Secret 管理
列出 ConfigMap
kubectl get configmaps
kubectl get configmaps -n my-namespace
列出默认命名空间或指定命名空间中的所有 ConfigMap。
创建 ConfigMap
kubectl create configmap my-config --from-literal=key1=value1 --from-literal=key2=value2
根据文字值创建一个新的 ConfigMap。
列出秘密
kubectl get secrets
kubectl get secrets -n my-namespace
列出默认命名空间或指定命名空间中的所有机密。
创建秘密
kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=secret
根据文字值创建一个新的秘密。
2. 扩展应用程序
规模部署
kubectl scale deployment my-deployment --replicas=3
将部署扩展到指定数量的副本。
3.更新应用程序
更新部署
kubectl set image deployment/my-deployment nginx=nginx:1.19.1
更新部署中的容器映像。
推出状态
kubectl rollout status deployment/my-deployment
显示部署的推出状态。
回滚部署
kubectl rollout undo deployment/my-deployment
将部署回滚到上一修订版本。
4.监控和日志记录
查看 Pod 日志
kubectl logs my-pod
显示指定 Pod 的日志。
查看之前的 Pod 日志
kubectl logs my-pod --previous
显示指定 pod 的先前实例的日志。
获取事件
kubectl get events
kubectl get events -n my-namespace
列出默认命名空间或指定命名空间中的所有事件。
5.资源管理
描述节点
kubectl describe node my-node
显示指定节点的详细信息。
标签节点
kubectl label nodes my-node disktype=ssd
向节点添加标签。
注释资源
kubectl annotate pod my-pod description="my example pod"
向资源添加注释。
6. 网络政策
创建网络策略
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-nginx
namespace: my-namespace
spec:
podSelector:
matchLabels:
app: nginx
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
应用网络策略:
kubectl apply -f network-policy.yaml
🧠 高级命令
1. 高级 Pod 管理
调试舱
kubectl debug my-pod --image=busybox --target=my-container
通过在 pod 中创建新的调试容器来调试正在运行的 pod。
端口转发
kubectl port-forward my-pod 8080:80
将本地端口转发到 pod 上的端口。
2. 高级节点管理
Cordon 节点
kubectl cordon my-node
将节点标记为不可调度。
漏极节点
kubectl drain my-node --ignore-daemonsets
在维护之前安全地从节点中驱逐所有 pod。
Uncordon 节点
kubectl uncordon my-node
将节点标记为可调度。
3. 资源配额和限制
创建资源配额
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
namespace: my-namespace
spec:
hard:
pods: "10"
requests.cpu: "4"
requests.memory: 16Gi
limits.cpu: "10"
limits.memory: 32Gi
应用资源配额:
kubectl apply -f resource-quota.yaml
4. 自定义资源和 CRD
创建自定义资源定义
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: crontabs.stable.example.com
spec:
group: stable.example.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
image:
type: string
replicas:
type: integer
scope: Namespaced
names:
plural: crontabs
singular: crontab
kind: CronTab
shortNames:
- ct
应用 CRD:
kubectl apply -f crd.yaml
创建自定义资源
apiVersion: stable.example.com/v1
kind: CronTab
metadata:
name: my-new-cron-object
namespace: my-namespace
spec:
cronSpec: "* * * * */5"
image: my-cron-image
replicas: 3
应用自定义资源:
kubectl apply -f custom-resource.yaml
5. Helm 用于 Kubernetes 包管理
安装 Helm
按照Helm 官方网站上的 Helm 安装说明进行操作。
添加 Helm 存储库
helm repo add stable https://charts.helm.sh/stable
安装 Helm Chart
helm install my-release stable/nginx
列出 Helm 版本
helm list
升级 Helm 版本
helm upgrade my-release stable/nginx
卸载 Helm Release
helm uninstall my-release
📊 最佳实践
使用命名空间
用于隔离
- 按命名空间组织资源,以便更好地管理和访问控制。
标签资源
- 使用标签来有效地组织和选择资源。
监控和记录
- 持续监控您的集群并收集日志以进行故障排除和性能分析。
使用脚本实现自动化
- 使用脚本自动执行重复性任务并确保一致性。
保护您的集群
- 实施 RBAC、网络策略和安全访问控制来保护您的集群。
🚀 结论
掌握从入门到高级的 Kubernetes 命令,对于 DevOps 工程师有效地管理和排除集群故障至关重要。这份全面的指南可作为您探索 Kubernetes 环境的宝贵参考。遵循最佳实践并利用这些命令,您可以确保 Kubernetes 设置稳健高效。
祝您集群愉快! 🎉
感谢您阅读我的博客...:)
©版权所有:ProDevOpsGuy
加入我们的 电报社区||关注我 获取更多 DevOps 和云内容