Kubernetes 1.18.6集群部署后,别忘了做这5件事:Dashboard访问、Metrics-Server配置与集群健康检查
Kubernetes 1.18.6集群部署后的5项关键运维操作
当你完成Kubernetes 1.18.6集群的基础部署后,真正的运维工作才刚刚开始。一个健康的集群不仅需要正确安装,还需要进行一系列配置和验证才能投入生产使用。本文将带你完成集群部署后的5项关键操作,确保你的集群功能完整、运行稳定。
1. 配置并安全访问Dashboard
Dashboard是Kubernetes官方提供的Web UI,它让你能够直观地查看和管理集群资源。但默认安装后,我们需要进行一些安全配置才能正常使用。
首先,确保Dashboard已经正确安装。运行以下命令检查Dashboard Pod的状态:
kubectl get pods -n kubernetes-dashboard如果状态不是"Running",你可能需要检查日志排查问题:
kubectl logs -n kubernetes-dashboard <pod-name>创建管理员账号和权限
默认情况下,Dashboard使用最小权限运行。我们需要创建一个具有适当权限的服务账号:
apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kubernetes-dashboard将上述内容保存为dashboard-admin.yaml并应用:
kubectl apply -f dashboard-admin.yaml获取访问令牌
获取刚创建的服务账号的访问令牌:
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}')复制输出的token内容,它将用于Dashboard登录。
安全访问Dashboard
默认情况下,Dashboard只监听集群内部。我们可以通过端口转发安全地访问它:
kubectl proxy然后通过浏览器访问:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/注意:生产环境中,你应该考虑配置Ingress和TLS证书来安全地暴露Dashboard,而不是使用简单的端口转发。
2. 安装Metrics-Server实现资源监控
Metrics-Server是集群资源使用数据的聚合器,它为Horizontal Pod Autoscaler和Dashboard等组件提供基础数据。
安装Metrics-Server
创建以下配置文件metrics-server.yaml:
apiVersion: v1 kind: ServiceAccount metadata: name: metrics-server namespace: kube-system --- apiVersion: apps/v1 kind: Deployment metadata: name: metrics-server namespace: kube-system labels: k8s-app: metrics-server spec: selector: matchLabels: k8s-app: metrics-server template: metadata: name: metrics-server labels: k8s-app: metrics-server spec: serviceAccountName: metrics-server containers: - name: metrics-server image: k8s.gcr.io/metrics-server/metrics-server:v0.4.1 args: - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP ports: - containerPort: 443 protocol: TCP --- apiVersion: v1 kind: Service metadata: name: metrics-server namespace: kube-system labels: k8s-app: metrics-server spec: selector: k8s-app: metrics-server ports: - port: 443 protocol: TCP targetPort: 443 --- apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: name: v1beta1.metrics.k8s.io spec: service: name: metrics-server namespace: kube-system group: metrics.k8s.io version: v1beta1 insecureSkipTLSVerify: true groupPriorityMinimum: 100 versionPriority: 100应用配置:
kubectl apply -f metrics-server.yaml验证安装
等待几分钟后,运行以下命令验证Metrics-Server是否正常工作:
kubectl top nodes kubectl top pods -A如果看到节点和Pod的资源使用数据,说明安装成功。
常见问题排查
如果Metrics-Server无法正常工作,检查以下方面:
查看Metrics-Server日志:
kubectl logs -n kube-system deployment/metrics-server确保节点上的kubelet正确配置了只读端口(10255)或认证端口(10250)
检查网络连接,确保Metrics-Server可以访问各节点的kubelet
3. 验证Pod网络(Calico/Flannel)工作状态
网络是Kubernetes集群的核心组件,必须确保Pod之间可以正常通信。
基本网络测试
创建一个测试Deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: network-test labels: app: network-test spec: replicas: 2 selector: matchLabels: app: network-test template: metadata: labels: app: network-test spec: containers: - name: busybox image: busybox command: ["sh", "-c", "sleep 3600"]应用并获取Pod信息:
kubectl apply -f network-test.yaml kubectl get pods -o wide跨节点网络测试
从其中一个Pod ping另一个Pod(确保它们在不同节点上):
kubectl exec <pod1-name> -- ping <pod2-ip>检查网络插件状态
根据你使用的网络插件(Calico或Flannel),检查其组件状态:
对于Calico:
kubectl get pods -n kube-system -l k8s-app=calico-node对于Flannel:
kubectl get pods -n kube-system -l app=flannel网络策略测试
创建一个拒绝所有入站流量的NetworkPolicy来测试网络策略是否生效:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-ingress spec: podSelector: {} policyTypes: - Ingress应用后,测试之前的ping操作应该会失败,证明网络策略生效。
4. 检查节点状态与核心组件健康
一个健康的Kubernetes集群需要所有节点和核心组件正常运行。
检查节点状态
kubectl get nodes每个节点的状态应该是"Ready"。如果有节点不是Ready状态,使用以下命令查看详情:
kubectl describe node <node-name>检查核心组件
Kubernetes的核心组件运行在kube-system命名空间下:
kubectl get pods -n kube-system确保以下关键组件正常运行:
- kube-apiserver
- kube-controller-manager
- kube-scheduler
- etcd
- kube-proxy
- CoreDNS
- 网络插件(Calico/Flannel)
组件日志检查
如果发现任何组件有问题,查看其日志:
kubectl logs -n kube-system <pod-name>对于多实例组件(如etcd),确保所有实例健康:
kubectl exec -n kube-system etcd-<node-name> -- etcdctl endpoint health系统资源检查
确保节点有足够资源运行工作负载:
kubectl top nodes关注CPU、内存使用情况,特别是kube-system命名空间下的系统Pod资源使用。
5. 基础kubectl命令验证集群功能
最后,我们需要通过一系列kubectl命令验证集群的基本功能是否正常。
命名空间操作
# 创建测试命名空间 kubectl create namespace test # 查看所有命名空间 kubectl get namespaces # 删除测试命名空间 kubectl delete namespace testDeployment操作
# 创建测试Deployment kubectl create deployment nginx-test --image=nginx # 查看Deployment状态 kubectl get deployment nginx-test # 扩展Deployment kubectl scale deployment nginx-test --replicas=3 # 删除Deployment kubectl delete deployment nginx-testService操作
# 创建Service kubectl create service clusterip my-service --tcp=80:80 # 查看Service kubectl get service my-service # 删除Service kubectl delete service my-service持久化存储测试
# 创建PVC cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi EOF # 查看PVC状态 kubectl get pvc test-pvc # 删除PVC kubectl delete pvc test-pvc集群信息查看
# 查看集群信息 kubectl cluster-info # 查看kubectl配置 kubectl config view # 检查kubectl连接 kubectl version --short完成以上5项关键操作后,你的Kubernetes 1.18.6集群就已经具备了基本的生产可用性。这些步骤确保了集群的可视化管理、监控能力、网络连通性、组件健康状态和基本功能验证。在实际生产环境中,你还需要考虑配置日志收集、监控告警、备份策略等高级运维功能。
