11-Kubernetes集群常见运维操作
Kubernetes集群常见运维操作
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导出,再导到第三方平台分析