Kubernetes是一个强大的容器编排平台,不管是运维、开发还是测试或多或少都会接触到,熟练的掌握k8s可大大提高工作效率和强化自身技能。
集群管理
1. 查看集群节点状态:
sql
kubectl get nodes
2. 查看集群资源使用情况:
sql
kubectl top nodes
3. 查看集群信息:
sql
kubectl cluster-info
4. 获取节点详细信息:
kubectl describe node <node-name>
5. 给节点打标签:
kubectl label nodes <node-name> key=value
6. 取消节点标签:
kubectl label nodes <node-name> key-
7. 查看命名空间信息:
kubectl describe namespace <namespace-name>
Pod管理
k8s中最小的可部署的计算单元,用来封装一个或多个紧密相关的容器应用,共享存储和网络。
1. 列出所有Pod:
kubectl get pods
2. 查看特定Pod的日志:
kubectl logs <pod-name> -n <namespace>
其中-n
后面跟命名空间名称,如果是在默认命名空间,可以省略。
3. 运行一个临时的Pod:
kubectl run my-pod --image=nginx
4. 进入正在运行的Pod:
kubectl exec -it <pod-name> -n <namespace> -- /bin/bash
5. 查看特定Pod的详细信息:
kubectl describe pod <pod-name> -n <namespace>
6. 删除Pod:
kubectl delete pod <pod-name> -n <namespace>
7. 强制删除Pod:
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
8. 查看Pod事件:
kubectl describe pod <pod-name> -n <namespace> | grep -i events
Deployment管理
用于管理Pod的声明式更新,自动处理Pod的创建、升级、回滚等,保证预期状态。
1. 列出所有Deployments:
kubectl get deployments
2. 查看特定Deployment的详细信息:
kubectl describe deployment <deployment-name> -n <namespace>
3. 创建Deployment:
sql
kubectl create deployment <deployment-name> --image=<container-image>
kubectl create deployment my-deployment --image=nginx
4. 更新Deployment中的容器镜像:
sql
kubectl set image deployment/<deployment-name> <container-name>=<new-container-image>
kubectl set image deployment/my-deployment nginx=nginx:latest
5. 回滚Deployment到上一个版本:
kubectl rollout undo deployment/my-deployment
6. 查看Deployment的更新历史:
kubectl rollout history deployment <deployment-name>
7. 回滚到指定版本的Deployment:
sql
# 假设要回滚到第3次修订版:
kubectl rollout undo deployment <deployment-name> --to-revision=3
8. 查看Deployment指定标签下的的Pods状态
kubectl get pods -l app=<deployment-label>
9. 查看Deployment的事件:
kubectl describe deployment <deployment-name> | grep -i events
10. 监控Deployment的更新进度
kubectl rollout status deployment <deployment-name>
11. 扩大或缩小副本数量:
kubectl scale deployment <deployment-name> --replicas=5
12. 删除Deployment:
kubectl delete deployment <deployment-name>
Service管理
定义一种访问Pod的策略和抽象层,提供稳定的访问入口,实现服务发现与负载均衡。
1. 列出所有Services:
sql
kubectl get services
kubectl get services -o wide
2. 查看特定Service的详细信息:
kubectl describe service <service-name> -n <namespace>
3. 创建Service:
可以直接通过命令行或者YAML文件创建:
kubectl create service clusterip my-service --tcp=80:8080
4. 暴露Deployment为Service:
自动创建Service指向Deployment的所有Pods:
kubectl expose deployment <deployment-name> --type=LoadBalancer --port=80 --target-port=8080
5. 编辑Service配置:
kubectl edit service <service-name> -n <namespace>
6. 更改Service类型:
kubectl patch service <service-name> -p '{"spec": {"type": "NodePort"}}'
7. 删除Service:
kubectl delete service <service-name> -n <namespace>
8. 创建ClusterIP类型的service:
ClusterIP为Service分配一个仅集群内部可访问的IP地址。
XML
# 命令行创建:
kubectl create service clusterip my-service --tcp=80:8080
# 基于yaml文件创建:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
9. 创建NodePort类型的service:
NodePort会在每个节点上开放一个静态端口,供外部访问集群内部的服务。
XML
# 命令行创建:
kubectl expose deployment my-deployment --type=NodePort --port=80 --target-port=8080
# 基于yaml文件创建:
apiVersion: v1
kind: Service
metadata:
name: my-service-nodeport
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080 # 指定节点上的端口
type: NodePort
10. 创建LoadBalancer类型的service:
适用于需要云提供商的负载均衡器来暴露服务的情况。
XML
# 命令行创建:
kubectl expose deployment my-deployment --type=LoadBalancer --port=80 --target-port=8080
# 基于yaml文件创建:
apiVersion: v1
kind: Service
metadata:
name: my-service-loadbalancer
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer
PV/PVC管理
Persistent Volumes (PVs) 提供了持久化的存储资源,PV类型多种多样,支持不同的存储后端,如本地存储、网络存储(如NFS、GlusterFS、Ceph等)。
1. 列出所有PV:
kubectl get pv
2. 查看PV详细信息:
kubectl describe pv <pv-name>
3. 创建本地PV:
XML
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv-example
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node01 # 指定节点名称
4. 创建NFS PV:
XML
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv-example
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle
storageClassName: nfs
nfs:
server: <nfs-server-ip> # nfs服务ip
path: "/exports/data" # nfs共享目录
5. 列出所有PVC:
kubectl get pvc
6. 查看PVC详细信息:
kubectl describe pvc <pvc-name>
7. 创建PVC:
XML
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: local-storage # 或 nfs,需与PV的storageClassName匹配
ConfigMap管理
用来存储配置数据,如应用的配置文件,以键值对形式挂载到Pod中,方便应用程序读取和分离配置与代码。
1. 创建ConfigMap:
kubectl create configmap <my-configmap> --from-literal=KEY1=VALUE1
2. 查看ConfigMap
kubectl get configmaps
3. 删除ConfigMap:
kubectl delete configmap <my-configmap>