【K8s】整体认识K8s之监控与升级/ETCD的备份和恢复/kustomization/CRD
metrics-server
先说一下metrics-server,这是一个聚合器,专门用来显示集群的资源使用情况,主要是内存和cpu。
安装 metrics-server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.0/components.yaml
部署好以后,执行kubectl top命令就会返回结果
# kubectl top nodes
# kubectl pod -A
K8s中常见的维护操作
查看pod详情
# kubectl describe pod frontend
查看pod日志
# kubectl logs frontend
查看pod资源用量
# kubectl top pod frontend
查看节点资源用量
# kubectl top nodes
禁止pod调度
# kubectl cordon host1
驱逐现有pod
# kubectl drain master --ignore-daemonsets
升级K8s流程
1、apt list 确定升级到哪个版本
# apt list kubeadm -a
2、禁止master节点接受新的调度
# kubectl cordon cka-master
# kubectl get nodes #master节点应该显示schedulingdisabled
3、驱逐master节点上现有任务
# kubectl drain cka-master --delete-emptydir-data --ignore-daemonset
4、安装目标的kubeadm
# apt-mark unload kubeadm
# apt-get update
# apt install kubeadm=1.30.3-1.1 -y
# apt-mark hold kubeadm
# kubeadm version
5、验证升级计划
# kubeadm upgrade plan
6、执行升级
# apt-mark unhold kubeadm
# kubeadm upgrade apply v1.30.3 --etcd-upgrade=false
7、升级kubelet、kubectl
# apt-mark unhold kubelet kubectl
# apt install kubelet=1.30.3-1.1 kubectl=1.30.3-1.1 -y
8、恢复调度功能
# apt-mark hold kubelet kubeadm kubectl
# systemctl daemon-reload
# systemctl restart kubelet.service
# kubectl uncordon cka-master
# kubectl get nodes
9、验证集群状态和版本
ETCD的备份和恢复过程
Etcd是一个键值存储数据库,用来存储K8s集群数据。备份过程:申明etcd api的版本;完成备份;验证备份有效性。恢复过程:停止kubelet服务;恢复etcd;启动kubelet服务;查询数据库健康状态。
备份
先安装etcd客户端(安装etcdctl命令行工具,手动安装才能执行后续的备份指令)并抓取快照进行备份(生产中应定期执行该操作)
# apt install etcd-client -y
# ETCDCTL_API=3 etcdctl \
--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 \
snapshot save etcdbackupfile.db
# ll etcdbackupfile.db
恢复
先停止服务
# mv /etc/kubernetes/manifects /etc/kubernetes/manifects.bak
删除现有etcd并通过快照恢复数据
# mv /var/lib/etcd /var/lib/etcd.bak
# ETCDCTL_API=3 etcdctl \
--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 \
--data-dir /var/lib/etcd \
snapshot restore etcdbackupfile.db
恢复服务并验证
# mv /etc/kubernetes/manifests.bak /etc/kubernetes/manifests
# systemctl restart kubelet.service
# kubectl get node
检查etcd是否健康
ETCDCTL_API=3 etcdctl --endpoints=https://192.168.30.130:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key endpoint health
命令详解参看
【K8s】ETCD备份和恢复的过程-CSDN博客
Kustomization
Kustomize是k8s的原生配置管理工具,它的作用就是对yaml配置文件进行自定义和管理,它解决了在不同环境中管理大量相似,但是又有差别的yaml文件的难题。他的工作方式就是采用base+ overlay模式,首先定义一个base,包含了1套通用的,在所有环境中都共享的yaml文件,再创建一个overlay针对特定的生产环境,只定义与base配置中不同的部分。这些不同点被称为补丁(patch),例如增加副本数量,更改镜像标签,修改config map中的配置数据。第三步就是使用这个Kustomization.yaml文件。这个文件,会告诉Kustomize基础配置在哪里,需要应用哪些补丁或者修改。Kustomize会动态的,将base和overlay合并生成最终的yaml配置,并应用到集群中。
CRD意义
custom resource definition自定义资源定义,它就像一个新的模板,告诉k8s api有一种新的资源类型,它是元数据,定义了新资源的结构,但本身不做任何事情。CR自定义资源是根据CR户这个模板创建的一个具体的实例,它是数据,是用句声明的期望状态,还通常是一个yaml文件,由用户提交给k8s。它的意义首先k8s只能管理它内置的对象,比如pod service但是有了CRD,k8s就可以管理任何东西,比如数据库、中间件,它变成了一个云原生的操作系统,可以使用统一的k8s api来管理整个数据中心的所有资源。第二它实现了声明式的api,你只要提交一个yaml文件,就可以得到一个,你想要的资源。第三只有CRD或者CR是不够的,它们只是静态的声明,还需要operator去控制它operator=crd+controlle(控制器)r,控制器监听特定类型的CR的增删改查,当用户创建一CR时,控制器会解决这个yaml文件,然后通过一系列的操作驱动整个系统达到期望状态。最后,构建了丰富的生态系统,几乎所有的顶级的云原生项目(如 Istio、Argo CD 等),这些复杂系统的安装和管理,只需要kubectl apply -f一个yaml文件即可。
CRD应用场景
CRD 的典型应用场景主要有:
1. 数据库管理:如 MySQL、Redis 等数据库实例的声明式管理。
2. 应用部署:自定义应用部署资源(如 Application CRD)。
3. 监控告警:Prometheus 的 ServiceMonitor、AlertRule 等。
4. 网络策略:自定义网络配置和安全策略。
5. 备份恢复:定时备份任务的声明式定义。
6. CI/CD 流水线:自定义 Pipeline 资源。
CRD的创建和使用过程
1、创建一个yaml文件来定义CRD
2、Kubectl apply -f myapp-crd.yaml 创建CRD
Kubectl api-resources | grep -i CustomResourceDefinition 可以查看创建的CRD资源
创建一个yaml文件来定义CR
3、Kubectl apply -f myapp-sample.yaml 创建CR
4、创建控制器
5、部署控制器pod
6、使用CR