目录
一、namespace
1.查看所有namespace
- kubectl get ns
2.查看指定的namespace
- kubectl get ns ns名称
3.查看namespace并指定输出格式
- kubectl get ns ns名称 -o 格式参数
k8s支持的格式有:wide、json、yaml
4.查看namespace详情
- kubectl describe ns ns名称
5.创建namespace
- kubectl create ns namespace名称
6.删除namespace
- kubectl delete ns namespace名称
7.通过yaml文件创建、删除namespace
ns-dev.yaml文件:
apiVersion: v1
kind: Namespace
metadata:
name: dev
创建:kubectl create -f ns-dev.yaml
删除:kubectl delete -f ns-dev.yaml
二、pod
查看pod资源清单:
kubectl explain pod.spec.containers
pod资源清单:
apiVersion: v1 #必选,版本号,例如v1
kind: Pod #必选,资源类型,例如 Pod
metadata: #必选,元数据
name: string #必选,Pod名称
namespace: string #Pod所属的命名空间,默认为"default"
labels: #自定义标签列表
- name: string
spec: #必选,Pod中容器的详细定义
containers: #必选,Pod中容器列表
- name: string #必选,容器名称
image: string #必选,容器的镜像名称
imagePullPolicy: [ Always|Never|IfNotPresent ] #获取镜像的策略
command: [string] #容器的启动命令列表,如不指定,使用打包时使用的启动命令
args: [string] #容器的启动命令参数列表
workingDir: string #容器的工作目录
volumeMounts: #挂载到容器内部的存储卷配置
- name: string #引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
mountPath: string #存储卷在容器内mount的绝对路径,应少于512字符
readOnly: boolean #是否为只读模式
ports: #需要暴露的端口库号列表
- name: string #端口的名称
containerPort: int #容器需要监听的端口号
hostPort: int #容器所在主机需要监听的端口号,默认与Container相同
protocol: string #端口协议,支持TCP和UDP,默认TCP
env: #容器运行前需设置的环境变量列表
- name: string #环境变量名称
value: string #环境变量的值
resources: #资源限制和请求的设置
limits: #资源限制的设置
cpu: string #Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
memory: string #内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests: #资源请求的设置
cpu: string #Cpu请求,容器启动的初始可用数量
memory: string #内存请求,容器启动的初始可用数量
lifecycle: #生命周期钩子
postStart: #容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启
preStop: #容器终止前执行此钩子,无论结果如何,容器都会终止
livenessProbe: #对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器
exec: #对Pod容器内检查方式设置为exec方式
command: [string] #exec方式需要制定的命令或脚本
httpGet: #对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket: #对Pod内个容器健康检查方式设置为tcpSocket方式
port: number
initialDelaySeconds: 0 #容器启动完成后首次探测的时间,单位为秒
timeoutSeconds: 0 #对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
periodSeconds: 0 #对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged: false
restartPolicy: [Always | Never | OnFailure] #Pod的重启策略
nodeName: <string> #设置NodeName表示将该Pod调度到指定到名称的node节点上
nodeSelector: obeject #设置NodeSelector表示将该Pod调度到包含这个label的node上
imagePullSecrets: #Pull镜像时使用的secret名称,以key:secretkey格式指定
- name: string
hostNetwork: false #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes: #在该pod上定义共享存储卷列表
- name: string #共享存储卷名称 (volumes类型有很多种)
emptyDir: {} #类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
hostPath: string #类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
path: string #Pod所在宿主机的目录,将被用于同期中mount的目录
secret: #类型为secret的存储卷,挂载集群与定义的secret对象到容器内部
scretname: string
items:
- key: string
path: string
configMap: #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
name: string
items:
- key: string
path: string
1.创建并运行pod
方式一:
- kubectl run 控制器名称 --image=镜像名称:版本 --port=端口 --namespace namespace名称
方式二:通过yaml文件创建pod:
- 创建pod:kubectl apply -f pod-base.yaml, pod-base.yaml:
apiVersion: v1 #版本号
kind: Pod #资源类型
metadata:
name: Pod名称 #Pod名称
namespace: 命名空间名称 #Pod所属的命名空间
spec: #Pod中容器的详细定义
containers: #Pod中容器列表
- name: 容器名
image: 镜像名:版本
- name: 容器名
image: 镜像名:版本
2.查看pod信息
- kubectl get pod -n 命名空间名称
3.查看pod详情
- kubectl describe pod pod名称 -n 命名空间名称
4.获取pod IP
- kubectl get pod -n dev -o wide
5.删除指定pod
方式一:
- kubectl delete pod pod名称 -n 命名空间名称
方式二,通过yaml文件删除pod:
- kubectl delete -f pod-nginx.yaml, pod-base.yaml:
apiVersion: v1
kind: Pod
metadata:
name: pod名称
namespace: 命名空间
spec:
containers:
- image: 镜像名:版本
name: 容器名
ports:
- name: 端口的名称
containerPort: 容器需要监听的端口号
protocol: 端口协议,支持TCP和UDP
6.查看pod资源配置项
- kubectl explain pod
7.设置pod镜像拉取策略
pod-imagepullpolicy.yaml:
apiVersion: v1
kind: Pod
metadata:
name: pod名称
namespace: 命名空间
spec:
containers:
- name: 容器名
image: 镜像名:版本
imagePullPolicy: Never # 用于设置镜像拉取策略
使用kubectl create -f pod-imagepullpolicy.yaml命令即可
8.设置污点
- kubectl taint nodes node名字 key=value:effect
- key和value是污点的标签,effect描述污点的作用
- effect选项:PreferNoSchedule、NoSchedule、NoExecute
9.去除污点
- kubectl taint nodes node名字 key:effect-
10.去除所有污点
- kubectl taint nodes node名字key-
三、label
1.给pod资源打标签
- kubectl label pod nginx-pod 标签key=标签value -n 命名空间
2.更新pod标签
- kubectl label pod pod名称 标签key=标签value -n 命名空间 --overwrite
3.查看pod标签
- kubectl get pod pod名称 -n 命名空间 --show-labels
4.筛选标签
- kubectl get pod -n 命名空间 -l 标签key=标签value --show-labels
- kubectl get pod -n 命名空间 -l 标签key!=标签value --show-labels
5.删除标签
- kubectl label pod pod名称 标签key- -n 命名空间
四、控制器
replicaSet资源清单:
apiVersion: apps/v1 # 版本号
kind: ReplicaSet # 类型
metadata: # 元数据
name: # rs名称
namespace: # 所属命名空间
labels: #标签
controller: rs
spec: # 详情描述
replicas: 3 # 副本数量
selector: # 选择器,通过它指定该控制器管理哪些pod
matchLabels: # Labels匹配规则
app: nginx-pod
matchExpressions: # Expressions匹配规则
- {key: app, operator: In, values: [nginx-pod]}
template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
deployment资源清单:
apiVersion: apps/v1 # 版本号
kind: Deployment # 类型
metadata: # 元数据
name: # rs名称
namespace: # 所属命名空间
labels: #标签
controller: deploy
spec: # 详情描述
replicas: 3 # 副本数量
revisionHistoryLimit: 3 # 保留历史版本
paused: false # 暂停部署,默认是false
progressDeadlineSeconds: 600 # 部署超时时间(s),默认是600
strategy: # 策略
type: RollingUpdate # 滚动更新策略,可选Recreate重建更新
rollingUpdate: # 滚动更新
maxSurge: 30% # 最大额外可以存在的副本数,可以为百分比,也可以为整数
maxUnavailable: 30% # 最大不可用状态的 Pod 的最大值,可以为百分比,也可以为整数
selector: # 选择器,通过它指定该控制器管理哪些pod
matchLabels: # Labels匹配规则
app: nginx-pod
matchExpressions: # Expressions匹配规则
- {key: app, operator: In, values: [nginx-pod]}
template: # 模板,当副本数量不足时,会根据下面的模板创建pod副本
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
1.创建deployment
方式一:
- kubectl create deployment名称 --image=镜像名:版本 --port=端口号 --replicas=要创建的pod数量 -n 命名空间
方式二:
- kubectl create -f deploy-demo.yaml
deploy-demo.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy名称
namespace: 命名空间名称
spec:
replicas: 3 #pod数量
selector: #选择器,通过它指定该控制器管理哪些pod
matchLabels: #标签匹配规则
run: nginx
template:
metadata:
labels:
run: nginx
spec:
containers:
- image: nginx:latest
name: nginx
ports:
- containerPort: 80
protocol: TCP
2.查看deployment信息
- kubectl get deploy -n 命名空间 -o wide
3.查看deployment详情
- kubectl describe deploy deployment名称 -n dev
4.删除deployment
- kubectl delete deploy deploy名称 -n 命名空间
5.创建replicaSet
pc-replicaset.yaml文件:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: pc-replicaset
namespace: dev
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.17.1
- kubectl create -f pc-replicaset.yaml
6.查看replicaSet
- kubectl get rs rs名字 -n 命名空间名称 -o wide
7.编辑rs副本数量
方式一:
- kubectl edit rs rs名称 -n 命名空间名称,然后修改yaml文件中replicas数量即可
方式二:
- kubectl scale rs rs名称 --replicas=副本数量 -n 命名空间名称
8.rs镜像升级
方式一:
- kubectl edit rs rs名称 -n 命名空间名称,然后修改yaml文件中image即可
方式二:
- kubectl set image rs rs名称 容器=镜像名:镜像版本 -n 命名空间名称
9.删除replicaSet,不保留pod
- kubectl delete rs rs名称 -n 命名空间
10.删除replicaSet,保留pod(不推荐)
- kubectl delete rs rs名称 -n 命名空间名称 --cascade=false
11.通过yaml文件删除replicaset
- kubectl delete -f pc-replicaset.yaml
12.deploy更改副本数量
方式一:
- kubectl scale deploy deploy名称 --replicas=副本数量 -n 命名空间名称
方式二:
- kubectl edit deploy deploy名称 -n 命名空间,然后直接修改yaml文件中replicas数量即可
13.deployment镜像变更
- kubectl set image deploy deploy名称 容器=镜像名:版本 -n 命名空间名称
14.查看deployment当前升级版本状态
- kubectl rollout status deploy deploy名称 -n 命名空间名称
15.查看deployment历史升级记录
- kubectl rollout history deploy deploy名称 -n 命名空间名称
16.deployment版本回退
- kubectl rollout undo deploy deploy名称 --to-revision=回退版本 -n 命名空间名称
忽略 --to-revision选项就是回退到上个版本,历史版本通过第15条命令查看。
17.继续已暂停的版本升级过程
- kubectl rollout resume deploy deploy名称 -n 命名空间名称
18.通过yaml文件删除deployment
- kubectl delete -f deploy-demo.yaml
deploy-demo.yaml在第一条命令中
五、service
service资源清单:
kind: Service # 资源类型
apiVersion: v1 # 资源版本
metadata: # 元数据
name: service # 资源名称
namespace: dev # 命名空间
spec: # 描述
selector: # 标签选择器,用于确定当前service代理哪些pod
app: nginx
type: # Service类型,指定service的访问方式
clusterIP: # 虚拟服务的ip地址
sessionAffinity: # session亲和性,支持ClientIP、None两个选项
ports: # 端口信息
- protocol: TCP
port: 3017 # service端口
targetPort: 5003 # pod端口
nodePort: 31122 # 主机端口