yaml文件大多从已知的yaml的基础上进行修改

kubectl run nginx --image=nginx --dry-run=client -o yaml > pod1.yaml

创建资源对象
kubectl create -f xxx.yaml(文件)、kubectl create -f <directory>(目录下所有文件)
查看资源对象
kubectl get nodes
kubectl get pods -n <namespace> -o wide
描述资源对象
kubectl describe nodes <node-name>
kubectl describe pods -n <namespace> kubectl describe <pod-name>
kubectl describe pods <rc-name>
删除资源对象
kubectl delete -f <filename>
kubectl delete pods,services -l name=<label-name>
kubectl delete pods --all(生产环境慎用)
执行容器的命令
kubectl exec <pod-name> date(默认使用第一个容器执行Pod的date命令)
kubectl exec <pod-name> -c <container-name> date(指定Pod中的某个容器执行date命令)
kubectl exec -it <pod-name> -c <container-name> /bin/bash (相当与docker exec -it <container-name> /bin/bash)
查看容器的日志
kubectl logs <pod-name>
kubectl logs -f <pod-name> -c <container-name> (相当于tail -f 命令)
kubectl格式化输出

显示Pod的更多信息
kubectl get pods -n <namespace> -o wide
以yaml格式显示
kubectl get pods -n <namespace> -o yaml

直接更新yaml更新并生效配置
kubectl edit 资源类型 <资源id> 
以自定义列明显示Pod信息
kubectl get pod <pod-name> -o =custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
基于文件的自定义列名输出
kubectl get pods <pod-name> -o=custom-columns-file=template.txt
输出结果排序
kubectl get pods --sort-by=.metadata.name
kubernetes集群管理指南

node的管理
命令:
kubectl replace -f xxx.yaml
kubectl patch
kubectl cordon <node_name> kubectl uncordon <node_name>(对node节点的隔离和恢复)
删除节点:
kubectl drain swarm1 --delete-local-data --force --ignore-daemonsets
kubectl delete node swarm1
使用:
kubectl get nodes
kubectl cordon <node_name> kubectl uncordon <node_name>
Label的管理:
给node设置标签
添加:kubectl label node lustre-manager-1 node-role.kubernetes.io/minion-1=
删除:kubectl label node lustre-manager-1 node-role.kubernetes.io/minion-1-
修改: kubectl label node lustre-manager-1 node-role.kubernetes.io/minion-1= --overwrite
给pod设置标签
把node改成pod即可
其他命令:
node节点加入master:kubeadm join 192.168.138.131:6443 --token zlk694.ev3odwj7rbyaggz6 --discovery-token-ca-cert-hash sha256:eefe51ccf1c54149f5ce89423c100b1e0de8f8081c7c2c0e07a7613ef2025146

生成加入master的命令:kubeadm token create --print-join-command

删除node节点:1)kubectl drain swarm1 --delete-local-data --force --ignore-daemonsets 2)kubectl delete node swarm1

node、pod的亲和策略(Affility): 常采用label或主机名的匹配来达到把相关的pod放到一起或分开的目的
 

查看docker镜像的dockerfile   

docker history <IMAGE ID> --format "{{.CreatedBy}}" --no-trunc |tac | awk '{if($3~/nop/){for(i=1;i<=3;i++){$i=""};print substr($0,4)}else{print "RUN",$0}}'

docker inspect  <Docker ID>

两种数据库配置:

1. 数据库在k8s外, k8s内的程序通过 endpoint 进行访问

 Kubernetes连接外部数据源 - ericnie - 博客园       k8s集群内部访问外部的数据库(mysql/redis)-慕课网

2. 通过持久卷 进行设置

K8s之MySQL实现数据持久化【附源码】_warrent_51CTO博客

控制器几种常见的类型类型:

Deployment:会控制副本数, 生成 rs 和 pod 

Deamon:在节点上生成 收日志 或 监视进程的pod,可用这个

StatefulSet:有状态式,创建有先后顺序,关闭也有先后顺序的  需要一个无头Service一起使用。生成的pod命名跟随数字从0开始增加。一个pod宕机后,会生成同名的pod,所有状态保持一致。同时无头Service 通过 服务名拼凑出的字符串可以直接对应IP

Service:通过selector匹配具有一定label的一批pod。对这批pod进行RoundRobin循环访问,达到负荷均衡。  type:NodePort可以对外暴露端口        Ingress-Nginx:会对域名 协议 权限进行处理

Job:单一任务

CronJob:定时任务

ConfigMap: 对环境变量进行统一储存和管理,其他pod可以对它引用寻找变量的值

Secret:需要加密的变量的存储 如数据库用户名密码等,其他pod可以对它引用寻找变量的值

这个博客很好,很多例子 kubetnetes - 文章分类 - BachrRR - 博客园

pod的生命周期:

init-c  main-c readiness liveness start end

init-c 首先会执行,而且有多个init-c时,是顺序一个一个地执行。要求幂等,一定能成功,否则不会执行main-c。 成功后进入main-c和start。  readiness一段时间后检查是否就绪。  liveness一段时间后检查是否生存,(通常时对端口或文件查看是否生存)不生存,pod就结束。   结束前会执行end。

通过 污点  容忍 亲和,来限制pod被分配到哪个节点,或 哪几个pod分到一起,或不能在一起

一个很好的切换node的例子  

创建NFS的pv及pvc

yum -y install nfs-utils

systemctl start nfs && systemctl enable nfs

mkdir -pv /data/volumes/{v1,v2,v3}

chown nobody.nobody /data/volumes/{v1,v2,v3}

kubernetes查看网络插件 kubectl查看容器详细信息_Pod