11-Kubernetes集群常见运维操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huangjun0210/article/details/86716593

1. Kubernetes对象管理操作

1. 1 Node管理

1.1.1 Node查看

kubectl get nodes

kubectl describe node/k8s-master|more

kubectl get node/k8s-master -o yaml|more

在这里插入图片描述
在这里插入图片描述

1.1.2 Node扩容与缩容

# 扩容
kube join

# 缩容
# 隔离并删除其上运行的pod
kubectl drain node/nodeid
#从集群的node列表中删除
kubectl delete node/nodeid
#在删除的节点上执行kubelet重启操作
systemctl daemon-reload
systemctl restart kubelet
#若想不留痕,在删除的节点上执行
kubeadm reset

1.1.3 Node的临时隔离与恢复

# 隔离node
kubectl cordon node/nodeid

# 恢复隔离node
kubectl uncordon node/nodeid

1.2 Label管理

1.2.1 对象Label的查看

#查看node label
kubectl get nodes --show-labels

#查看pod label
kubectl get pods --show-labels

#查看node service
 kubectl get services --show-labels

在这里插入图片描述

1.2.2 对象Label的添加和删除

#添加node label
kubectl label node/k8s-node2 k1=v1
#删除node label
kubectl label node/k8s-node2 k1-

#pod service 的 label 添加删除类似

在这里插入图片描述

1.2.3 对象Label的更新

#更新 --overwrite
kubectl label node/k8s-node2 k1=value1 --overwrite

在这里插入图片描述

1.3 Namespace管理

1.3.1 增删Namespace

#创建
kubectl create namespace foo
# 查看
kubectl get namespaces

#在新建的foo namespace上创建pod
kubectl create -f nginx-deployment.yaml -n foo
kubectl get pods -n foo

#删除 删除后该namespace下的pod都会被删除
kubectl delete namespace foo

在这里插入图片描述

1.3.2 通过context简化不同Namespace下运维

# 查看可用的contexts列表
kubectl config get-contexts

#创建一个context
kubectl config set-context foo-ctx --namespace=foo --cluster=kubernetes --user=kubernetes-admin

# 切换当前context
kubectl config use-context foo-ctx

在这里插入图片描述

1.4 Pod管理

nginx-deployment.yaml

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

1.4.1 增删pod

# 新增
kubectl create-f nginx-deployment.yaml 
# 推荐
kubectl apply -f nginx-deployment.yaml 

#删除
kubectl delete -f nginx-deployment.yaml 

1.4.2 查看pod

kubectl get pods

kubectl describe pods/nginx-deployment-5c7588df-zlbgt

kubectl get pods/nginx-deployment-5c7588df-zlbgt -o yaml

1.4.3 更新pod

# 修改pod的yaml文件 
# 比如 replicas: 1  -> replicas: 2 
vi nginx-deployment.yaml 

# 使修改的yaml文件生效
kubectl apply -f nginx-deployment.yaml 

# 编辑pod的源信息 
# 例如添加label app1: nginx1
kubectl edit pods/nginx-deployment-5c7588df-j77g8

在这里插入图片描述
在这里插入图片描述

1.5 Service管理

nginx-svc-foo.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-nginx
spec:
  ports:
  - port: 80
    protocol: TCP

1.5.1 增删Service

#创建
kubectl create -f nginx-svc-foo.yaml 

1.5.2 查看Service

kubectl get service

kubectl describe svc/my-nginx

1.5.3 更新Service

# 修改service的yaml文件  
vi nginx-svc-foo.yaml 

# 使修改的yaml文件生效
kubectl apply -f nginx-svc-foo.yaml 

# 编辑service的源信息 
kubectl edit svc/my-nginx

在这里插入图片描述

2. Kubernetes资源管理操作

计算资源管理术语

  • 资源请求(Resource Requests,简称Requests)
  • 资源限制(Resource Limits,简称Limits)
  • CPU资源单位:cpu单元(cpu unit);Memory资源单位:字节数(Bytes)

计算资源管理

  • 管理container的计算资源request与limit
  • LimitRange:管理namespace下面的pod和container的计算资源
  • ResourceQuota:namespace下的总体资源配额管理

container-request-and-limit.yaml

apiVersion: v1
kind: Pod
metadata:
  name: frontend
spec: 
  containers: 
  - name: db
    image: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: "password"
    resources: 
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits: 
        memory: "128Mi"
        cpu: "500m"
  - name: wp
    image: wordpress
    resources: 
      requests: 
        memory: "64Mi"
        cpu: "250m"
      limits: 
        memory: "64Mi"
        cpu: "500m"

limitrange.yaml

apiVersion: v1
kind: LimitRange
metadata:
  name: foo-namespace-limit-range
spec: 
  limits: 
  - default: 
      cpu: 1
      memory: 200Mi
    defaultRequest: 
      cpu: 0.2
      memory: 100Mi
    max: 
      cpu: 2
      memory: 2Gi
    min: 
      cpu: 0.1
      memory: 50Mi
    type: Container
  - max:
      cpu: 4
      memory: 3Gi
    min:
      cpu: 0.1
      memory: 60Mi
    type: Pod
kubectl create -f limitrange.yaml

kubectl get  limitrange

kubectl describe namespaces/foo

在这里插入图片描述

kubectl create -f nginx-deployment.yaml 

kubectl describe pods/nginx-deployment-5c7588df-lb5zv

在这里插入图片描述

resourcequota.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec: 
  hard: 
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2" 
    limits.memory: 2Gi
# 删除原有的pod
kubectl delete -f nginx-deployment.yaml 

#创建resourcequota
kubectl create -f resourcequota.yaml 

# 查看namespaces详细描述信息
kubectl describe namespaces/foo

在这里插入图片描述

kubectl create -f nginx-deployment.yaml 

kubectl describe namespaces/foo

在这里插入图片描述
可以看到资源的消耗。

3. Kubernetes集群日志查看与事件查看

3.1 平台组件日志

  • Node组件日志
  • Master组件日志
  • Addons日志
journalctl -u kubelet -f

#日志目录
/var/log/containers/


3.2 工作负载日志

  • 在/var/log/containers/目录下查看
  • 使用kubectl查看Pod中某个Container的日志
#查看容器输出到stdout的日志
kubectl logs <pod-name>

#跟踪查看容器的日志,相当于tail –f命令的结果
kubectl logs –f <pod-name> -c <container-name>
  • 进入Container中查看日志文件输出
#侵入到容器中查看
kubectl exec
  • 利用docker命令查看Container日志
1. 确定pod所在的node
2. 登录到该节点,通过关键字在docker ps 结果中找到对应的container
3. 通过docker logs查看日志或者通过docker exec侵入container查看日志
4. 该方法最适用于Pod启动失败需要查找原因的场景,因为kubectl对情动失败的Pod不起作用

3.3 事件(event)

3.3.1 event查看

kubectl get event <-n namespaces>

# kubectl describe pods/podname 可以看到pod中的event列表

3.3.2 event过期

event几个小时后会过期,但是event对运维比较重要,若要保留,可将event导出,再导到第三方平台分析

猜你喜欢

转载自blog.csdn.net/huangjun0210/article/details/86716593