Kubernetes(K8S)进阶知识
1 架构与组件

1.1 Master节点
- Kube-apiserver:k8s所有资源的增、删、改、查等操作的唯一入口
- Etcd:k8s的后端数据库
- kube-controller-manager:k8s所有资源对象的自动化控制中心,就像东厂的大总管😎
- kube-scheduler:负责资源调度,就像公交车的调度室🚌
1.2 Node节点
- Kube-proxy:实现通信与负载均衡
- Kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master节点密切协作实现集群管理的基本功能
- docker容器引擎:负责本机的容器创建和管理
1.3 namespace
逻辑上的资源环境隔离,一般用于区分不同项目
# 查看所有namespace
kubectl get namespace
# 创建namespace
kubectl create namespace my-namespace
# 查看pod
kubectl get pod --namespace=my-namespace
2 管理对象
Deployment管理多个RS,RS管理多个Pod,Pod管理多个docker容器。注意:新版的Replica Set与Deployment这两个资源对象逐步替换了之前的Replication Controller。
- Pod
- Replication Controller(RC)
- Replica Set(RS)
- Deployment
2.1 kubectl命令
# 基本格式
kubectl command type name flags
# command: get-查看 describe-查看对象详细信息 delete-删除
# 简写可选参数(namespace)
kubectl get all --namespace=kube-system
kubectl get all -n kube-system
# 输出更多信息
kubectl get pod -o wide
kubectl create deployment mydep --image=nginx
kubectl describe deployment mydep
# 通过配置文件创建deployment
kubectl apply -f /path/to/my-deployment.yaml
kubectl get deployment
kubectl get replicaset
# 查看滚动升级历史
kubectl rollout history deployment mydep
# 查看单个版本详细信息
kubectl rollout history deployment mydep --revisoion=2
# 回滚到某个版本
kubectl rollout undo deployment mydep --to-revision=2
2.2 Pod
Pause容器代表着这个Pod,其IP和储存被Pod内的docker容器共用
生命周期:Pending-Running-Succeed/Failed-Unknown
# 通过配置文件创建pod
kubectl apply -f /path/to/my-pod.yaml
# 查看pod详细信息
kubectl get pod mypod -o yaml
# 查看创建pod的yaml配置文件字段解释
kubectl explain pod.apiVersion
# 进入容器
kubectl exec -it mypod /bin/bash
3 Label
标签与标签选择器,Label可以附加到各种资源对象上,例如Node、Pod、Service、RC等
# 添加新标签
kubectl label pod mypod new-label=label-value
# 查看每个pod标签信息
kubectl get pod --show-labels
# 筛选特定标签值的pod
kubectl get pod -l new-label=label-value
4 Service
逻辑上的一组pod,Kubernetes里的每个Service其实就是我们经常提起的微服务架构中的一个“微服务”。每个Service分配了一个全局唯一的虚拟IP地址,这个虚拟IP被称为Cluster IP。
4.1 实现方式
- ClusterIP
- NodePort
- LoadBalancer
4.2 组件
Endpointer Controller
Kube-proxy
# 创建service
kubectl apply -f /path/to/service.yaml
# 查看service
kubectl get service
kubectl get svc
# 查看endpoints
kubectl get endpoints
# 删除service
kubectl delete svc service-name
5 其他管理方式
5.1 DaemonSet
保障每个node运行一个pod,用于部署守护进程
5.2 Job
批量创建一次性任务pod
kubectl apply -f /path/to/job.yaml
kubectl get job
5.3 CronJob
定时任务
kubectl apply -f /path/to/cronjob.yaml
kubectl get cronjobs.batch
kubectl delete cronjobs.batch cronjob-name
6 Probes
使用探针对pod进行健康检查,主要2种探针,以及3种handler执行方式:
- ExecAction-判断执行命令是否成功
- TCPSocketAction-访问指定端口
- HTTPGetAction-判断HTTP请求返回的状态码是否在[200, 400)之间
6.1 Liveness存活探针
判断pod是否存活,没存活则重启pod
6.2 Readiness就绪探针
判断pod是否就绪能够对外提供服务,未就绪时不会将pod与service关联
7 网络模型与通讯
CNI 网络组件
8 Volumn
8.1 EmptyDir
生命周期与pod一致,删除pod后文件也被删除,pod内部容器共享使用
8.2 hostPath
将主机上的一个文件夹挂载到pod,删除pod后文件依旧存在
8.3 PV和PVC
persistent volume
# 创建PV
kubectl apply -f mypv.yaml
获取PV
kubectl get pv
# 删除PV
kubectl delete pv mypv
persistent volume claim
# 创建PVC
kubectl apply -f mypvc.yaml
# 获取PVC
kubectl get pvc
# 删除PVC
kubectl delete pvc mypvc
9 ConfigMap和Secret
configmap管理普通非敏感配置信息
# 创建configmap的几种方法
kubectl create configmap cm-name --from-file=/path/to/config-map-dir
kubectl create configmap cm-name --from-file=/path/to/config-map-file
kubectl create configmap cm-name --from-literal=key=value
kubectl apply -f /path/to/configmap.yaml
# 获取所有configmap
kubectl get configmap
# 查看详细信息
kubectl describe configmap cm-name
secret管理敏感配置信息
# 创建secret的几种方式
kubectl create secret generic secret-name --from-file=file1.txt --from-file=file2.txt
kubectl apply -f /path/to/secret.yaml
# 获取所有secret
kubectl get secrets
# 查看详细信息
kubectl describe secrets secret-name
10 QoS
pod通过requests/limits被划分为3种从高到低的级别:
- Guaranteed: limits = requests,对资源有明确要求
- Burstable: limits > requests,对资源有一定要求
- BestEffort: 不指定资源限制,默认就是,对资源无要求
11 资源管理与调度
对pod调度到某个节点分为3阶段:
- 节点预选:筛选出满足requests最低要求的节点
- 节点优选:对节点打分
- 节点选定:取分数最高的节点
# 查看node资源
kubectl get node node-name -o yaml
12 Helm
Helm 是 Kubernetes(简称 K8s)生态中一个非常重要的 包管理工具,可以类比为 Linux 中的 apt 或 yum。它主要用于简化 Kubernetes 应用的部署和管理,尤其是复杂应用的安装和升级。
12.1 helm包管理工具基本操作
# 查看版本详细
helm version
# 查看repo
helm repo list
# 搜索查找应用
helm search mysql
# 安装应用
helm install stable/mysql
# 删除应用
helm delete name
# 查看已安装应用
helm list
12.2 chart
helm的打包格式就是chart,是一系列相关的k8s集群资源清单。
# 创建chart
helm create chart-name
# 部署chart应用
helm install chart-name --name app-name
# 查看应用状态
helm status app-name
13 RBAC(Role Based Access Control)
认证-鉴权-访问控制
13.1 用户对象
- User Account:集群全局
- Service Account:仅限单个namespace内,用于pod中进程访问其他资源
13.2 RBAC对象
- Role:namespace级别
- ClusterRole:集群级别
- RoleBinding
- ClusterRoleBinding
# 查看用户
kubectl config view
# 查看service account
kubectl get sa -n namespace
# 查看Role详细信息
kubectl get role -n namespace -o yaml
# 查看ClusterRole
kubectl get clusterrole