目录

    主要记录最近遇到的一些开发问题,解决方法。

    1. Kubernetes 中给 Node 增加 Role: worker

    kubectl get nodes
    NAME         STATUS   ROLES    AGE    VERSION
    i-6fns0nua   Ready    master   6d3h   v1.15.2
    i-m69skuyd   Ready    <none>   6d2h   v1.15.2
    
    kubectl label node i-m69skuyd  node-role.kubernetes.io/worker=
    node/i-m69skuyd labeled
    
    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 的一个节点

    查看当前节点:

    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 ,禁止调度待删除节点:

    kubectl drain i-m69skuyd --delete-local-data --force --ignore-daemonsets
    

    删除节点:

    kubectl delete node i-m69skuyd
    

    3. Kubernetes 上用 Helm 安装 Prometheus

    首先需要创建 PV,可以参考第一章节。

    然后,执行命令:

    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 或服务

    1. 重启 Pod

    如果 Pod 关联了副本控制器,直接删除 Pod,Kubernetes 会重新创建 Pod 。

    • 查看 Pod
    kubectl get pod -n {NAMESPACE}
    
    • 删除 Pod
    kubectl delete pod {POD_NAME} -n {NAMESPACE}
    

    另外一种是,使用 replace

    kubectl replace --force -f pod.yaml
    

    如果没有 pod.yaml 文件,可以直接使用下面的命令:

    kubectl get pod {POD_NAME} -n {NAMESPACE} -o yaml | kubectl replace --force -f -
    
    1. 重启 Deployment

    将服务的副本数设置为 0,然后恢复原始的副本数。

    • 查看服务
    kubectl get deployment -n {NAMESPACE}
    
    • 设置副本数为 0
    kubectl scale deployment {DEPLOYMENT_NAME} --replicas=0 -n {NAMESPACE}
    
    • 恢复副本数量
    kubectl scale deployment {DEPLOYMENT_NAME} --replicas={REPLICAS_NUM} -n {NAMESPACE}
    

    5. 通过 NodePort 的方式,暴露正在运行的服务

    在服务没有启动之前,通过修改 yaml 配置,可以暴露服务。当服务已经运行起来之后,可以通过 patch 的方式暴露服务。

    • 查看服务
    kubectl get service -n {NAMESPACE}
    
    • 暴露端口访问
    kubectl patch service {SERVICE_NAME} -p '{"spec":{"type":"NodePort"}}' -n {NAMESPACE}