主要记录最近遇到的一些开发问题,解决方法。
1. Kubernetes 中给 Node 增加 Role: worker
1
2
3
4
|
kubectl get nodes
NAME STATUS ROLES AGE VERSION
i-6fns0nua Ready master 6d3h v1.15.2
i-m69skuyd Ready <none> 6d2h v1.15.2
|
1
2
|
kubectl label node i-m69skuyd node-role.kubernetes.io/worker=
node/i-m69skuyd labeled
|
1
2
3
4
|
kubectl get node
NAME STATUS ROLES AGE VERSION
i-6fns0nua Ready master 6d3h v1.15.2
i-m69skuyd Ready worker 6d2h v1.15.2
|
2. 删除 Kubernetes 的一个节点
查看当前节点:
1
2
3
4
|
kubectl get node
NAME STATUS ROLES AGE VERSION
i-6fns0nua Ready master 6d3h v1.15.2
i-m69skuyd Ready worker 6d2h v1.15.2
|
迁移 Pod ,禁止调度待删除节点:
1
|
kubectl drain i-m69skuyd --delete-local-data --force --ignore-daemonsets
|
删除节点:
1
|
kubectl delete node i-m69skuyd
|
3. Kubernetes 上用 Helm 安装 Prometheus
首先需要创建 PV,可以参考第一章节。然后,执行命令:
1
2
3
4
5
|
helm install --namespace monitor --name prometheus stable/prometheus \
--set alertmanager.persistentVolume.storageClass="local" \
--set server.persistentVolume.storageClass="local"
helm install --namespace monitor --name grafana stable/grafana \
--set persistence.storageClassName="local"
|
其他操作可以参考,在 Minikube 集群上安装 Prometheus。
4. 如何重启 Kubernetes 中的 Pod 或服务
重启 Pod
如果 Pod 关联了副本控制器,直接删除 Pod,Kubernetes 会重新创建 Pod 。
1
|
kubectl get pod -n {NAMESPACE}
|
1
|
kubectl delete pod {POD_NAME} -n {NAMESPACE}
|
另外一种是,使用 replace
。
1
|
kubectl replace --force -f pod.yaml
|
如果没有 pod.yaml 文件,可以直接使用下面的命令:
1
|
kubectl get pod {POD_NAME} -n {NAMESPACE} -o yaml | kubectl replace --force -f -
|
重启 Deployment
将服务的副本数设置为 0,然后恢复原始的副本数。
1
|
kubectl get deployment -n {NAMESPACE}
|
1
|
kubectl scale deployment {DEPLOYMENT_NAME} --replicas=0 -n {NAMESPACE}
|
1
|
kubectl scale deployment {DEPLOYMENT_NAME} --replicas={REPLICAS_NUM} -n {NAMESPACE}
|
5. 通过 NodePort 的方式,暴露正在运行的服务
在服务没有启动之前,通过修改 yaml 配置,可以暴露服务。当服务已经运行起来之后,可以通过 patch
的方式暴露服务。
1
|
kubectl get service -n {NAMESPACE}
|
1
|
kubectl patch service {SERVICE_NAME} -p '{"spec":{"type":"NodePort"}}' -n {NAMESPACE}
|