Kubernetes
一、基础知识
1. 概念和术语
2. Kubernetes特性
3. 集群组件
4. 抽象对象
5. 镜像加速下载
二、安装部署kubeadm
1. 基础环境准备
2. 安装runtime容器(Docker)
3. 安装runtime容器(Contained)
4. Containerd进阶使用
5. 部署kubernets集群
6. 部署calico网络组件
7. 部署NFS文件存储
8. 部署ingress-nginx代理
9. 部署helm包管理工具
10. 部署traefik代理
11. 部署dashboard管理面板(官方)
12. 部署kubesphere管理面板(推荐)
12. 部署metrics监控组件
13. 部署Prometheus监控
14. 部署elk日志收集
15. 部署Harbor私有镜像仓库
16. 部署minIO对象存储
17. 部署jenkins持续集成工具
三、kubectl命令
1. 命令格式
2.node操作常用命令
3. pod常用命令
4.控制器常用命令
5.service常用命令
6.存储常用命令
7.日常命令总结
8. kubectl常用命令
四、资源对象
1. K8S中的资源对象
2. yuml文件
3. Kuberbetes YAML 字段大全
4. 管理Namespace资源
5. 标签与标签选择器
6. Pod资源对象
7. Pod生命周期与探针
8. 资源需求与限制
9. Pod服务质量(优先级)
五、资源控制器
1. Pod控制器
2. ReplicaSet控制器
3. Deployment控制器
4. DaemonSet控制器
5. Job控制器
6. CronJob控制器
7. StatefulSet控制器
8. PDB中断预算
六、Service和Ingress
1. Service资源介绍
2. 服务发现
3. Service(ClusterIP)
4. Service(NodePort)
5. Service(LoadBalancer)
6. Service(ExternalName)
7. 自定义Endpoints
8. HeadlessService
9. Ingress资源
10. nginx-Ingress案例
七、Traefik
1. 知识点梳理
2. 简介
3. 部署与配置
4. 路由(IngressRoute)
5. 中间件(Middleware)
6. 服务(TraefikService)
7. 插件
8. traefikhub
9. 配置发现(Consul)
10. 配置发现(Etcd)
八、存储
1. 配置集合ConfigMap
6. downwardAPI存储卷
3. 临时存储emptyDir
2. 敏感信息Secret
5. 持久存储卷
4. 节点存储hostPath
7. 本地持久化存储localpv
九、rook
1. rook简介
2. ceph
3. rook部署
4. rbd块存储服务
5. cephfs共享文件存储
6. RGW对象存储服务
7. 维护rook存储
十、网络
1. 网络概述
2. 网络类型
3. flannel网络插件
4. 网络策略
5. 网络与策略实例
十一、安全
1. 安全上下文
2. 访问控制
3. 认证
4. 鉴权
5. 准入控制
6. 示例
十二、pod调度
1. 调度器概述
2. label标签调度
3. node亲和调度
4. pod亲和调度
5. 污点和容忍度
6. 固定节点调度
十三、系统扩展
1. 自定义资源类型(CRD)
2. 自定义控制器
十四、资源指标与HPA
1. 资源监控及资源指标
2. 监控组件安装
3. 资源指标及其应用
4. 自动弹性缩放
十五、helm
1. helm基础
2. helm安装
3. helm常用命令
4. HelmCharts
5. 自定义Charts
6. helm导出yaml文件
十六、k8s高可用部署
1. kubeadm高可用部署
2. 离线二进制部署k8s
3. 其他高可用部署方式
十七、日常维护
1. 修改节点pod个数上限
2. 集群证书过期更换
3. 更改证书有效期
4. k8s版本升级
5. 添加work节点
6. master节点启用pod调度
7. 集群以外节点控制k8s集群
8. 删除本地集群
9. 日常错误排查
10. 节点维护状态
11. kustomize多环境管理
12. ETCD节点故障修复
13. 集群hosts记录
14. 利用Velero对K8S集群备份还原与迁移
15. 解决K8s Namespace无法正常删除的问题
16. 删除含指定名称的所有资源
十八、k8s考题
1. 准备工作
2. 故障排除
3. 工作负载和调度
4. 服务和网络
5. 存储
6. 集群架构、安装和配置
本文档使用 MrDoc 发布
-
+
home page
7.日常命令总结
# 一、查看命令 1. 查看所有namespace的pods运行情况<br />`kubectl get pods --all-namespaces` 2. 查看具体pods,记得后边跟namespace名字哦<br />`kubectl get pods kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system` 3. 查看pods具体信息<br />`kubectl get pods -o wide kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system` 4. 获取所有deployment<br />`kubectl get deployment --all-namespaces` 5. 查看kube-system namespace下面的pod/svc/deployment 等等(-o wide选项可以查看存在哪个对应的节点)<br />`kubectl get pod /svc/deployment -n kube-system` 6. 列出该 namespace 中的所有 pod 包括未初始化的<br />`kubectl get pods --include-uninitialized` 7. 查看deployment<br />`kubectl get deployment nginx-app` 8. 查看rc和servers<br />`kubectl get rc,services` 9. 查看pods结构信息(重点,通过这个看日志分析错误)对控制器和服务,node同样有效<br />`kubectl describe pods xxxxpodsname --namespace=xxxnamespace` - 其他控制器类似,就是kubectl get 控制器 控制器具体名称 10. 查看pod日志<br />`kubectl logs $POD_NAME` 11. 查看pod变量<br />`kubectl exec my-nginx-5j8ok -- printenv | grep SERVICE` # 二、集群查看 1. 查看集群健康情况<br />`kubectl get cs` 2. 集群核心组件运行情况<br />`kubectl cluster-info` 3. 查看表空间名<br />`kubectl get namespaces` 4. 查看版本<br />`kubectl version` 5. 查看API<br />`kubectl api-versions` 6. 查看事件<br />`kubectl get events` 7. 获取全部节点<br />`kubectl get nodes` 8. 删除节点<br />`kubectl delete node k8s2` # 三、创建资源 1. 创建资源<br />`kubectl create -f ./nginx.yaml` 2. 创建+更新,可以重复使用<br />`kubectl apply -f xxx.yaml` 3. 创建当前目录下的所有yaml资源<br />`kubectl create -f .` 4. 使用多个文件创建资源<br />`kubectl create -f ./nginx1.yaml -f ./mysql2.yaml` 5. 使用目录下的所有清单文件来创建资源<br />`kubectl create -f ./dir` 6. 使用 url 来创建资源<br />`kubectl create -f https://git.io/vPieo` 7. 创建带有终端的pod<br />`kubectl run -i --tty busybox --image=busybox` 8. 启动一个 nginx 实例<br />`kubectl run nginx --image=nginx` 9. 启动多个pod<br />`kubectl run mybusybox --image=busybox --replicas=5` 10. 获取 pod 和 svc 的文档<br />`kubectl explain pods,svc` # 四、更新 1. 滚动更新 pod frontend-v1<br />`kubectl rolling-update python-v1 -f python-v2.json` 2. 更新资源名称并更新镜像<br />`kubectl rolling-update python-v1 python-v2 --image=image:v2` 3. 更新 frontend pod 中的镜像<br />`kubectl rolling-update python --image=image:v2` 4. 退出已存在的进行中的滚动更新<br />`kubectl rolling-update python-v1 python-v2 --rollback` 5. 基于 stdin 输入的 JSON 替换 pod<br />`cat pod.json | kubectl replace -f -` 6. 为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口<br />`kubectl expose rc nginx --port=80 --target-port=8000` 7. 更新单容器 pod 的镜像版本(tag)到 v4<br />`kubectl get pod nginx-pod -o yaml | sed 's/\(image:myimage\):.*$/\1:v4/' | kubectl replace -f –` 8. 添加标签<br />`kubectl label pods nginx-pod new-label=awesome` 9. 添加注解<br />`kubectl annotate pods nginx-pod icon-url=http://goo.gl/XXBTWq` 10. 自动扩展 deployment<br />`kubectl autoscale deployment foo --min=2 --max=10` # 五、编辑资源 1. 编辑名为 docker-registry 的 service<br />`kubectl edit svc/docker-registry` 2. 修改启动参数<br />`vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf` # 六、动态伸缩pod 1. 将foo副本集变成3个<br />`kubectl scale --replicas=3 rs/foo` 2. 缩放“foo”中指定的资源。<br />`kubectl scale --replicas=3 -f foo.yaml` 3. 将deployment/mysql从2个变成3个<br />`kubectl scale --current-replicas=2 --replicas=3 deployment/mysql` 4. 变更多个控制器的数量<br />`kubectl scale --replicas=5 rc/foo rc/bar rc/baz` 5. 查看变更进度<br />`kubectl rollout status deploy deployment/mysql` # 七、label 操作 1. 增加节点lable值<br />`kubectl label nodes node1 zone=north` 2. 增加lable值 [key]=[value]<br />`kubectl label pod redis-master-1033017107-q47hh role=master` 3. 删除lable值<br />`kubectl label pod redis-master-1033017107-q47hh role-` 4. 修改lable值<br />`kubectl label pod redis-master-1033017107-q47hh role=backend --overwrite` # 八、滚动升级 1. 配置文件滚动升级<br />`kubectl rolling-update redis-master -f redis-master-controller-v2.yaml` 2. 命令升级<br />`kubectl rolling-update redis-master --image=redis-master:2.0` 3. pod版本回滚<br />`kubectl rolling-update redis-master --image=redis-master:1.0 --rollback` # 九、etcdctl 常用操作 1. 检查网络集群健康状态<br />`etcdctl cluster-health` 2. 带有安全认证检查网络集群健康状态<br />`etcdctl --endpoints=https://192.168.71.221:2379 cluster-health` 3. 查看集群成员<br />`etcdctl member list` 4. 设置网络配置<br />`etcdctl set /k8s/network/config ‘{ “Network”: “10.1.0.0/16” }’` 5. 获取网络配置<br />`etcdctl get /k8s/network/config` # 十、删除资源 1. 根据label删除: `kubectl delete pod -l app=flannel -n kube-system` 2. 删除 pod.json 文件中定义的类型和名称的 pod<br />`kubectl delete -f ./pod.json` 3. 删除名为“baz”的 pod 和名为“foo”的 service<br />`kubectl delete pod,service baz foo` 4. 删除具有 name=myLabel 标签的 pod 和 serivce<br />`kubectl delete pods,services -l name=myLabel` 5. 删除具有 name=myLabel 标签的 pod 和 service,包括尚未初始化的<br />`kubectl delete pods,services -l name=myLabel --include-uninitialized` 6. 删除 my-ns namespace下的所有 pod 和 serivce,包括尚未初始化的<br />`kubectl -n my-ns delete po,svc --all` 7. 强制删除<br />`kubectl delete pods prometheus-7fcfcb9f89-qkkf7 --grace-period=0 --force` 8. 删除指定deployment<br />`kubectl delete deployment kubernetes-dashboard --namespace=kube-system` 9. 删除指定svc<br />`kubectl delete svc kubernetes-dashboard --namespace=kube-system` 10. 根据资源清单文件删除<br />`kubectl delete -f kubernetes-dashboard.yaml` 11. 强制替换,删除后重新创建资源。会导致服务中断。<br />`kubectl replace --force -f ./pod.json` # 十一、交互 1. dump 输出 pod 的日志(stdout)<br />`kubectl logs nginx-pod` 2. dump 输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)<br />`kubectl logs nginx-pod -c my-container` 3. 流式输出 pod 的日志(stdout)<br />`kubectl logs -f nginx-pod` 4. 流式输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)<br />`kubectl logs -f nginx-pod -c my-container` 5. 交互式 shell 的方式运行 pod<br />`kubectl run -i --tty busybox --image=busybox -- sh` 6. 连接到运行中的容器<br />`kubectl attach nginx-pod -i` 7. 转发 pod 中的 6000 端口到本地的 5000 端口<br />`kubectl port-forward nginx-pod 5000:6000` 8. 在已存在的容器中执行命令(只有一个容器的情况下)<br />`kubectl exec nginx-pod -- ls /` 9. 在已存在的容器中执行命令(pod 中有多个容器的情况下)<br />`kubectl exec nginx-pod -c my-container -- ls /` 10. 显示指定 pod和容器的指标度量<br />`kubectl top pod POD_NAME --containers` 11. 进入pod<br />`kubectl exec -ti podName /bin/bash` # 十二、调度配置 1. 标记 my-node 不可调度<br />`kubectl cordon k8s-node` 2. 清空 my-node 以待维护<br />`kubectl drain k8s-node` 3. 标记 my-node 可调度<br />`kubectl uncordon k8s-node` 4. 显示 my-node 的指标度量<br />`kubectl top node k8s-node` 5. 将当前集群状态输出到 stdout<br />`kubectl cluster-info dump` 6. 将当前集群状态输出到 /path/to/cluster-state<br />`kubectl cluster-info dump --output-directory=/path/to/cluster-state` - 如果该键和影响的污点(taint)已存在,则使用指定的值替换 7. 查看kubelet进程启动参数<br />`kubectl taint nodes foo dedicated=special-user:NoSchedule` 8. 查看日志<br />`journalctl -u kubelet -f` # 十三、导出配置文件 1. 导出proxy<br />`kubectl get ds -n kube-system -l k8s-app=kube-proxy -o yaml>kube-proxy-ds.yaml` 2. 导出kube-dns<br />`kubectl get deployment -n kube-system -l k8s-app=kube-dns -o yaml >kube-dns-dp.yaml` <br />`kubectl get services -n kube-system -l k8s-app=kube-dns -o yaml >kube-dns-services.yaml` 3. 导出所有 configmap<br />`kubectl get configmap -n kube-system -o wide -o yaml > configmap.yaml` # 十四、复杂操作命令 1. 删除kube-system 下Evicted状态的所有pod<br />`kubectl get pods -n kube-system |grep Evicted| awk ‘{print $1}’|xargs` ## 十五、文件拷贝 1. 将pod里的文件拷贝到主机 ```bash kubectl cp -n 名称空间 pod名:文件绝对路径 文件目标位置 例:将pod里 /data/test.sql 拷贝到主机当前路径下,并命名为test.sql kubectl cp -n zeus -c mysql zeus-mysql-back-0:data/test.sql ./test.sql ``` 2. 将主机文件拷贝到pod ```bash kubectl cp 主机文件路径 -n 分区 -c 容器 pod名:容器内绝对路径 例:将主机当前路径下的test.sql文件拷贝到pod的data目录下,并命名为testnew.sql kubectl cp ./test.sql -n zeus -c mysql zeus-mysql-back-1:data/testnew.sql ```
Nathan
June 22, 2024, 12:44 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password