一、k8s中文文档
https://kubernetes.io/zh/docs/home/
二、查看k8s端口汇总时,发现一个文档比较齐全的网址
https://www.kancloud.cn/pshizhsysu/kubernetes/2064652
三、kubectl 查看 csr证书请求与批准
#查看 kubelet 证书请求
kubectl get csr
NAME AGE SIGNERNAME REQUESTOR CONDITION
node-csr-uCEGPOIiDdlLODKts8J658HrFq9CZ--K6M4G7bjhk8A 6m3s kubernetes.io/kube-apiserver-client-kubelet kubelet-bootstrap Pending
#批准申请
kubectl certificate approve node-csr-uCEGPOIiDdlLODKts8J658HrFq9CZ--K6M4G7bjhk8A
# 查看节点
kubectl get node
四、K8s - 手动删除一个Node节点教程(附:删除节点后再重新添加进去)
1,需求描述
在使用 K8s 集群的时候可能会遇到这种情况:发现其中一台 Node 节点出了问题,想将其删除再换一个节点。
原文:K8s - 手动删除一个Node节点教程(附:删除节点后再重新添加进去)
2,操作步骤
(1)假设我们需要删除 k8s-node1 这个节点,首先在 master 节点上依次执行以下两个命令:
1
2
kubectl drain k8s-node1 --delete-local-data --force --ignore-daemonsets
kubectl delete node k8s-node1
执行后通过 kubectl get node 命令可以看到 k8s-node1 已被成功删除:
原文:K8s - 手动删除一个Node节点教程(附:删除节点后再重新添加进去)
(2)接着在 k8s-node1 这个 Node 节点上执行如下命令,这样该节点即完全从 Cluster 中脱离开来:
kubeadm reset
附:将 Node 节点重新加入
当一个 Node 节点通过上述方式从 Cluster 中删除后,如果需要重新添加进去的话,再次执行 join 方法即可:
原文出自:www.hangge.com 转载请保留原文链接:https://www.hangge.com/blog/cache/detail_3025.html
五、K8S yaml文件详解
https://www.cnblogs.com/shunzi115/p/12392784.html
六、常用命令收集
查看所有namespace的pods运行情况
kubectl get pods --all-namespaces
查看具体pods,记得后边跟namespace名字哦
kubectl get pods kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system
查看pods具体信息
kubectl get pods -o wide kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system
查看集群健康状态
kubectl get cs
获取所有deployment
kubectl get deployment --all-namespaces
列出该 namespace 中的所有 pod 包括未初始化的
kubectl get pods --include-uninitialized
查看deployment()
kubectl get deployment nginx-app
查看rc和servers
kubectl get rc,services
查看pods结构信息(重点,通过这个看日志分析错误)对控制器和服务,node同样有效
kubectl describe pods xxxxpodsname --namespace=xxxnamespace
其他控制器类似吧,就是kubectl get 控制器 控制器具体名称
查看pod日志
kubectl logs $POD_NAME
查看pod变量
kubectl exec my-nginx-5j8ok -- printenv | grep SERVICE
kubectl get cs #### 集群健康情况
kubectl cluster-info #### 集群核心组件运行情况
kubectl get namespaces #### 表空间名
kubectl version #### 版本
kubectl api-versions #### API
kubectl get events #### 查看事件
kubectl get nodes //获取全部节点
kubectl delete node k8s2 //删除节点
kubectl rollout status deploy nginx-test
创建
kubectl create -f ./nginx.yaml #### 创建资源
kubectl create -f . #### 创建当前目录下的所有yaml资源
kubectl create -f ./nginx1.yaml -f ./mysql2.yaml #### 使用多个文件创建资源
kubectl create -f ./dir #### 使用目录下的所有清单文件来创建资源
kubectl create -f https://git.io/vPieo #### 使用 url 来创建资源
kubectl run -i --tty busybox --image=busybox ----创建带有终端的pod
kubectl run nginx --image=nginx #### 启动一个 nginx 实例
kubectl run mybusybox --image=busybox --replicas=5 ----启动多个pod
kubectl explain pods,svc #### 获取 pod 和 svc 的文档
更新
kubectl rolling-update python-v1 -f python-v2.json #### 滚动更新 pod frontend-v1
kubectl rolling-update python-v1 python-v2 --image=image:v2 #### 更新资源名称并更新镜像
kubectl rolling-update python --image=image:v2 #### 更新 frontend pod 中的镜像
kubectl rolling-update python-v1 python-v2 --rollback #### 退出已存在的进行中的滚动更新
cat pod.json | kubectl replace -f - #### 基于 stdin 输入的 JSON 替换 pod
强制替换,删除后重新创建资源。会导致服务中断。
kubectl replace --force -f ./pod.json
为 nginx RC 创建服务,启用本地 80 端口连接到容器上的 8000 端口
kubectl expose rc nginx --port=80 --target-port=8000
更新单容器 pod 的镜像版本(tag)到 v4
kubectl get pod nginx-pod -o yaml | sed 's/(image: myimage):.*$/\1:v4/' | kubectl replace -f -
kubectl label pods nginx-pod new-label=awesome #### 添加标签
kubectl annotate pods nginx-pod icon-url=http://goo.gl/XXBTWq #### 添加注解
kubectl autoscale deployment foo --min=2 --max=10 #### 自动扩展 deployment “foo”
编辑资源
kubectl edit svc/docker-registry #### 编辑名为 docker-registry 的 service
KUBE_EDITOR="nano" kubectl edit svc/docker-registry #### 使用其它编辑器
动态伸缩pod
kubectl scale --replicas=3 rs/foo #### 将foo副本集变成3个
kubectl scale --replicas=3 -f foo.yaml #### 缩放“foo”中指定的资源。
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql #### 将deployment/mysql从2个变成3个
kubectl scale --replicas=5 rc/foo rc/bar rc/baz #### 变更多个控制器的数量
kubectl rollout status deploy deployment/mysql #### 查看变更进度
删除
kubectl delete -f ./pod.json #### 删除 pod.json 文件中定义的类型和名称的 pod
kubectl delete pod,service baz foo #### 删除名为“baz”的 pod 和名为“foo”的 service
kubectl delete pods,services -l name=myLabel #### 删除具有 name=myLabel 标签的 pod 和 serivce
kubectl delete pods,services -l name=myLabel --include-uninitialized #### 删除具有 name=myLabel 标签的 pod 和 service,包括尚未初始化的
kubectl -n my-ns delete po,svc --all #### 删除 my-ns namespace下的所有 pod 和 serivce,包括尚未初始化的
kubectl delete pods prometheus-7fcfcb9f89-qkkf7 --grace-period=0 --force 强制删除
交互
kubectl logs nginx-pod #### dump 输出 pod 的日志(stdout)
kubectl logs nginx-pod -c my-container #### dump 输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
kubectl logs -f nginx-pod #### 流式输出 pod 的日志(stdout)
kubectl logs -f nginx-pod -c my-container #### 流式输出 pod 中容器的日志(stdout,pod 中有多个容器的情况下使用)
kubectl run -i --tty busybox --image=busybox -- sh #### 交互式 shell 的方式运行 pod
kubectl attach nginx-pod -i #### 连接到运行中的容器
kubectl port-forward nginx-pod 5000:6000 #### 转发 pod 中的 6000 端口到本地的 5000 端口
kubectl exec nginx-pod -- ls / #### 在已存在的容器中执行命令(只有一个容器的情况下)
kubectl exec nginx-pod -c my-container -- ls / #### 在已存在的容器中执行命令(pod 中有多个容器的情况下)
kubectl top pod POD_NAME --containers #### 显示指定 pod和容器的指标度量
调度配置
kubectl cordon k8s-node #### 标记 my-node 不可调度
kubectl drain k8s-node #### 清空 my-node 以待维护
kubectl uncordon k8s-node #### 标记 my-node 可调度
kubectl top node k8s-node #### 显示 my-node 的指标度量
kubectl cluster-info dump #### 将当前集群状态输出到 stdout
kubectl cluster-info dump --output-directory=/path/to/cluster-state #### 将当前集群状态输出到 /path/to/cluster-state
如果该键和影响的污点(taint)已存在,则使用指定的值替换
kubectl taint nodes foo dedicated=special-user:NoSchedule
以上部分命令参考自:https://debian.cn/articles/633?www
七、以下为学习过程中记录的命令
1、导出yaml文件, --dry-run 表示不运行; -o yaml 生成对应的yaml
2、应用yaml部署应用
3、对外发布(暴露端口),service相关
#导出yaml文件
kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml
#应用yaml部署应用
kubectl apply -f web.yaml
#对外暴露端口 ,会生成一个Service类型的yaml
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml
#通过刚才生成的yaml ,部署Service,
kubectl apply -f web1.yaml
#查看暴露的端口(service)
kubectl get service -o wide
访问 任意node的ip:32449 可访问到上面暴露的端口
4、controller中的deployment 应用升级回滚和弹性伸缩
升级前的yaml配置的版本号为nginx:1.14
#直接设置deployment的新镜像版本号
kubectl set image deployment web nginx=nginx:1.15
#查看升级状态
kubectl rollout status deployment web
过程为滚动更新,如下图,目前旧版本的还在运行,新版本还在下载镜像中
#查看deployment历史版本
kubectl rollout history deployment web
#回滚到上一个版本
kubectl rollout undo deployment web
#回滚到指定版本
kubectl rollout undo deployment web --to-revision=2
#查看deployment的image的版本
kubectl get deployment -o wide
#弹性伸缩,指定yaml中的应用的副本数
kubectl scale --replicas=2 -f web.yaml
#弹性伸缩,指定web这个deployment的副本数
kubectl scale deployment web --replicas=2
5、进入一个pod中的命令行环境
#进入一个pod中的命令行环境
kubectl exec -it ds-test-cmjkd bash
6、删除一个yaml中的应用
kubectl delete -f job.yaml
7、helm相关
7.1)配置helm仓库
微软仓库(http://mirror.azure.cn/kubernetes/charts/)这个仓库推荐,基本 上官网有的 chart 这里都有。
阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )
官方仓库(https://hub.kubeapps.com/charts/incubator)官方 chart 仓库,国 内有点不好使。
#添加存储库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#更新仓库地址
helm repo update
#查看配置的存储库
helm repo list
helm search repo stable
#删除存储库:
helm repo remove aliyun
7.2)使用helm快速部署应用
#1.使用命令搜索应用
#helm search repo 名称(weave)
helm search repo weave
#2.根据搜索内容选择安装 chart
#helm install 安装之后的名称 搜索之后应用名称
helm install ui aliyun/weave-scope
#3.查看安装之后的状态
helm list
helm status 安装之后的名称
#修改service的yaml文件,type改为NodePort 。修改运行中的service的yaml,将ClusterIP改为NodePort
#如果保存失败,记得看上面的提示信息,可能是单词拼错
kubectl edit svc ui-weave-scope
#删除安装的chart: helm uninstall chart
helm uninstall web
7.3)如何自己创建chart
#1.使用命令创建chart
helm create mychart
#进入创建的chart模板
cd mychart/
#2.在templates 创建自己的deployment 、 service 两个yaml文件
kubectl create deployment web-heml --image=nginx --dry-run -o yaml > mydeployment.yaml
kubectl apply -f mydeployment.yaml #先创建,后面删除。不创建的话,后面创建NodePort会报错
kubectl expose deployment web-heml --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > myservice.yaml
kubectl delete web-heml
#3.安装mychart helm install 自定义chart名称 chart配置文件夹
helm install myweb mychart/
#4.应用升级 helm upgrade chart名称 chart配置文件夹
helm upgrade myweb mychart/
Chart.yaml :当前chart属性配置信息
templates:编写yaml文件放到这个目录
values.yaml: yaml文件可以使用全局变量
7.4)实现yaml高效复用
- 通过传递参数,动态渲染模板,yaml内容动态传入参数生产
- 在chart有values.yaml文件,定义yaml文件全局变量
#1、在Values.yaml定义变量和值
replicas: 1
image: nginx
tag: 1.16
label: nginx
port: 80
#2、在templates的yaml文件,获取定义变量值
#通过表达式刑事使用全局变量
# {{ .Values.变量名称}}
# {{ .Release.Name}}
#3、尝试运行
helm install --dry-run myweb2 mychart/
#4、直接运行
helm install myweb2 mychart/