☰
Current Page
Main Menu
Home
Home
Editing
redsun
Edit
Preview
h1
h2
h3
default
Set your preferred keybinding
default
vim
emacs
markdown
Set this page's format to
AsciiDoc
Creole
Markdown
MediaWiki
Org-mode
Plain Text
RDoc
Textile
Rendering unavailable for
BibTeX
Pod
reStructuredText
Help 1
Help 1
Help 1
Help 2
Help 3
Help 4
Help 5
Help 6
Help 7
Help 8
Autosaved text is available. Click the button to restore it.
Restore Text
Kubernetes 运维文档 概述 Kubernetes(简称 K8s)是一种用于自动部署、扩展和管理容器化应用程序的开源系统。Sealos 是一个用于快速部署和管理 Kubernetes 集群的工具,特别适用于离线安装场景。本文档将详细介绍如何使用 Sealos 5.0 管理 Kubernetes v1.22 集群,包括节点的增加和删除、集群状态的检查、Etcd 的备份以及通过 Etcd 恢复集群的步骤。 1、k8s增加和删除节点 增加节点 在 Kubernetes 集群中,增加节点是为了提升集群的容量和冗余度。通过增加节点,可以扩展集群的计算和存储资源,从而支持更多的工作负载和应用。以下是详细步骤: 1. 准备工作 1.准备新节点的主机: o确保新节点的硬件和操作系统符合 Kubernetes 的要求。建议使用与现有节点相同规格的服务器,以避免资源不均衡问题。 o新节点应安装 Docker 或其他容器运行时环境。 o安装必要的 Kubernetes 组件,如 kubeadm、kubelet 和 kubectl。 2.网络配置: o确保新节点能够与现有的 Kubernetes 集群中的节点进行通信。所有节点之间的网络必须连通。 3.下载 Sealos: o在管理节点上下载并安装 Sealos 5.0。 wget https://github.com/labring/sealos/releases/download/v5.0.0/sealos chmod +x sealos mv sealos /usr/local/bin/ 2. 使用 Sealos 增加节点 1.生成加入命令: o在管理节点上使用 Sealos 增加新节点。假设新节点的 IP 地址为 192.168.0.101。 sealos add --node 192.168.0.101 2.在新节点上执行加入命令: o新节点上不需要手动执行任何命令,Sealos 会自动完成节点的加入过程。 3.验证节点加入: o在管理节点上使用 kubectl get nodes 命令查看新节点是否成功加入集群。 kubectl get nodes o预期输出应显示新节点的状态为 Ready,表示节点已成功加入集群。 删除节点 在 Kubernetes 集群中,删除节点可能是由于硬件故障、资源优化或集群缩容等原因。以下是详细步骤: 1. 准备工作 1.迁移工作负载: o在删除节点之前,确保将该节点上的工作负载迁移到其他节点上。可以使用 kubectl drain 命令将节点设置为不可调度,并将其上的 Pod 驱逐到其他节点。 kubectl drain 节点名称 --ignore-daemonsets o例如,假设要删除的节点名称为 node-1: kubectl drain node-1 --ignore-daemonsets 2.确认节点状态: o确保节点上的所有 Pod 已经成功迁移。可以使用以下命令检查: kubectl get pods --all-namespaces -o wide | grep node-1 2. 使用 Sealos 删除节点 1.删除节点: o在管理节点上使用 Sealos 删除节点。假设要删除的节点 IP 地址为 192.168.0.101。 sealos delete --node 192.168.0.101 2.移除节点: o在 Kubernetes 集群中移除该节点。 kubectl delete node node-1 3.验证节点删除: o使用 kubectl get nodes 命令确认节点已经从集群中移除。 kubectl get nodes o预期输出应不再显示已删除的节点。 2、Kubernetes 集群状态的检查 确保 Kubernetes 集群的健康和正常运行是运维工作的核心任务之一。以下是一些常用的检查步骤和命令: 1. 节点状态检查 使用 kubectl get nodes 命令检查所有节点的状态。 kubectl get nodes 输出示例: NAME STATUS ROLES AGE VERSION node-1 Ready control-plane,master 10d v1.22.0 node-2 Ready <none> 10d v1.22.0 node-3 Ready <none> 10d v1.22.0 2. Pod 状态检查 使用 kubectl get pods 命令检查所有命名空间中的 Pod 状态。 kubectl get pods --all-namespaces 输出示例: NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-78fcd69978-5kf2s 1/1 Running 0 10d kube-system etcd-node-1 1/1 Running 0 10d kube-system kube-apiserver-node-1 1/1 Running 0 10d kube-system kube-controller-manager-node-1 1/1 Running 0 10d kube-system kube-proxy-4w8dd 1/1 Running 0 10d kube-system kube-scheduler-node-1 1/1 Running 0 10d 3. 组件状态检查 使用 kubectl get componentstatuses 命令检查 Kubernetes 组件的状态。 kubectl get componentstatuses 输出示例: NAME STATUS MESSAGE ERROR scheduler Healthy ok controller-manager Healthy ok etcd-0 Healthy {"health":"true"} 4. 服务状态检查 使用 kubectl get services --all-namespaces 命令检查所有命名空间中的服务状态。 kubectl get services --all-namespaces 输出示例: NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10d kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 10d 5. 日志检查 使用 kubectl logs 命令查看特定 Pod 的日志,以便诊断和排查问题。 kubectl logs pod-name -n namespace 例如,查看 kube-apiserver 的日志: kubectl logs kube-apiserver-node-1 -n kube-system 6. 事件检查 使用 kubectl get events --all-namespaces 命令查看所有命名空间中的事件,以了解集群中的警告和错误信息。 kubectl get events --all-namespaces 7. 资源使用情况检查 使用 kubectl top nodes 和 kubectl top pods 命令检查节点和 Pod 的资源使用情况(CPU 和内存)。 kubectl top nodes 输出示例: NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% node-1 200m 10% 1024Mi 25% node-2 150m 7% 512Mi 12% node-3 100m 5% 256Mi 6% kubectl top pods --all-namespaces 输出示例: NAMESPACE NAME CPU(cores) MEMORY(bytes) kube-system coredns-78fcd69978-5kf2s 10m 70Mi kube-system etcd-node-1 50m 200Mi kube-system kube-apiserver-node-1 100m 300Mi kube-system kube-controller-manager-node-1 70m 150Mi kube-system kube-proxy-4w8dd 20m 30Mi kube-system kube-scheduler-node-1 30m 50Mi 通过以上步骤,运维人员可以全面了解 Kubernetes 集群的运行状态,及时发现和解决潜在问题,确保集群的稳定性和高可用性。 3、Etcd 的备份 Etcd 是 Kubernetes 的核心组件之一,用于存储集群的所有数据。备份 Etcd 数据对于保障集群的数据安全至关重要。以下是详细步骤: 1. 确定备份策略 1.备份频率: o根据集群的规模和业务需求,确定备份的频率。例如,对于生产环境,可以选择每天进行一次备份。 2.备份保留周期: o根据存储空间和业务需求,确定备份文件的保留周期。例如,可以保留最近 7 天的备份文件。 3.备份存储位置: o选择合适的备份存储位置,可以是本地存储、NFS 存储或云存储。确保备份文件的存储位置可靠且易于访问。 2. 手动备份 Etcd 1.创建备份 Pod: o通过 Kubernetes 创建一个临时 Pod 来进行 Etcd 数据的备份。以下是一个示例 YAML 文件 etcd-backup.yaml: apiVersion: v1 kind: Pod metadata: name: etcd-backup namespace: kube-system spec: containers: - name: etcd-backup image: bitnami/etcd:latest command: - /bin/sh - -c - | ETCDCTL_API=3 etcdctl snapshot save /backup/etcd_backup.db \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key volumeMounts: - name: etcd-certs mountPath: /etc/kubernetes/pki/etcd - name: backup mountPath: /backup volumes: - name: etcd-certs hostPath: path: /etc/kubernetes/pki/etcd - name: backup hostPath: path: /path/to/backup 查看全部 2.应用 YAML 文件: o使用 kubectl 命令应用上述 YAML 文件。 kubectl apply -f etcd-backup.yaml 3.等待备份完成: o通过查看 Pod 的日志,确认备份操作是否成功。 kubectl logs -f pod/etcd-backup -n kube-system 4.验证备份文件: o检查备份文件是否成功生成。 ls -lh /path/to/backup/ 3. 自动备份 Etcd 为了简化备份操作,可以使用 Kubernetes 的 CronJob 实现 Etcd 的自动备份。 1.创建备份 CronJob: o编写一个 CronJob YAML 文件 etcd-backup-cronjob.yaml,以下是一个示例: apiVersion: batch/v1 kind: CronJob metadata: name: etcd-backup namespace: kube-system spec: schedule: "0 2 * * *" # 每天凌晨 2 点执行 jobTemplate: spec: template: spec: containers: - name: etcd-backup image: bitnami/etcd:latest command: - /bin/sh - -c - | ETCDCTL_API=3 etcdctl snapshot save /backup/etcd_backup_$(date +\%Y\%m\%d\%H\%M\%S).db \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key volumeMounts: - name: etcd-certs mountPath: /etc/kubernetes/pki/etcd - name: backup mountPath: /backup volumes: - name: etcd-certs hostPath: path: /etc/kubernetes/pki/etcd - name: backup hostPath: path: /path/to/backup restartPolicy: OnFailure 查看全部 2.应用 CronJob YAML 文件: o使用 kubectl 命令应用上述 YAML 文件。 kubectl apply -f etcd-backup-cronjob.yaml 3.验证备份: o定期检查备份文件是否成功生成,并进行恢复测试,确保备份文件可以正常恢复集群数据。 4、通过 Etcd 恢复 Kubernetes 集群 在发生严重故障时,通过 Etcd 备份文件可以恢复 Kubernetes 集群的数据和状态。以下是详细步骤: 1. 确定故障原因 1.确认集群故障原因: o在进行恢复操作之前,确认集群故障的原因,确保恢复操作是必要的。 o可以通过查看日志和事件信息来诊断故障原因。 2. 停止 Etcd 服务 在所有 Etcd 节点上停止 Etcd 服务。 kubectl -n kube-system scale deployment etcd --replicas=0 3. 恢复 Etcd 数据 1.创建恢复 Pod: o通过 Kubernetes 创建一个临时 Pod 来进行 Etcd 数据的恢复。以下是一个示例 YAML 文件 etcd-restore.yaml: apiVersion: v1 kind: Pod metadata: name: etcd-restore namespace: kube-system spec: containers: - name: etcd-restore image: bitnami/etcd:latest command: - /bin/sh - -c - | ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd_backup.db \ --data-dir /var/lib/etcd volumeMounts: - name: etcd-certs mountPath: /etc/kubernetes/pki/etcd - name: backup mountPath: /backup - name: etcd-data mountPath: /var/lib/etcd volumes: - name: etcd-certs hostPath: path: /etc/kubernetes/pki/etcd - name: backup hostPath: path: /path/to/backup - name: etcd-data hostPath: path: /var/lib/etcd 查看全部 2.应用 YAML 文件: o使用 kubectl 命令应用上述 YAML 文件。 kubectl apply -f etcd-restore.yaml 3.等待恢复完成: o通过查看 Pod 的日志,确认恢复操作是否成功。 kubectl logs -f pod/etcd-restore -n kube-system 4.删除恢复 Pod: o恢复完成后,删除恢复 Pod。 kubectl delete pod etcd-restore -n kube-system 4. 启动 Etcd 服务 在所有 Etcd 节点上启动 Etcd 服务。 kubectl -n kube-system scale deployment etcd --replicas=3 5. 验证恢复结果 1.检查 Etcd 状态: o使用 etcdctl 命令检查 Etcd 的健康状态。 ETCDCTL_API=3 etcdctl endpoint health \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key 输出示例: https://127.0.0.1:2379 is healthy: successfully committed proposal: took = 1.234ms 2.检查 Kubernetes 集群状态: o使用 kubectl get nodes 命令检查所有节点的状态。 kubectl get nodes o输出示例: NAME STATUS ROLES AGE VERSION node-1 Ready control-plane,master 10d v1.22.0 node-2 Ready <none> 10d v1.22.0 node-3 Ready <none> 10d v1.22.0 3.检查 Pod 状态: o使用 kubectl get pods --all-namespaces 命令检查所有命名空间中的 Pod 状态。 kubectl get pods --all-namespaces o输出示例: NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-78fcd69978-5kf2s 1/1 Running 0 10d kube-system etcd-node-1 1/1 Running 0 10d kube-system kube-apiserver-node-1 1/1 Running 0 10d kube-system kube-controller-manager-node-1 1/1 Running 0 10d kube-system kube-proxy-4w8dd 1/1 Running 0 10d kube-system kube-scheduler-node-1 1/1 Running 0 10d 4.检查组件状态: o使用 kubectl get componentstatuses 命令检查 Kubernetes 组件的状态。 kubectl get componentstatuses o输出示例: NAME STATUS MESSAGE ERROR scheduler Healthy ok controller-manager Healthy ok etcd-0 Healthy {"health":"true"} 5.检查事件: o使用 kubectl get events --all-namespaces 命令查看所有命名空间中的事件,以了解集群中的警告和错误信息。 kubectl get events --all-namespaces 通过上述步骤,您可以确保 Kubernetes 集群已成功从 Etcd 备份中恢复,并且集群状态正常。
Uploading file...
Sidebar
[[_TOC_]]
Edit message:
Cancel