k8s常用指令
# 根据yaml文件部署
kubectl apply -f <文件名>
# 根据yaml文件删除
kubectl delete -f <文件名>
# 查看k8s个组件的状态
kubectl get node,pod,svc
# 查看node详情
kubectl describe node <node名称>
# 查看pod详情
kubectl describe pod <pod名称>
# 查看service详情
kubectl describe svc <svc名称>
# 删除svc
kubectl delete svc <svc名称> -n <命名空间>
# 进入容器内部
kubectl exec -it <pod名称> -c <容器组空间> -n <命名空间> -- bash
# 容器拷贝文件到本地服务器
kubectl cp -n <命名空间> <pod名称>:/文件src /本地文件
#--previous=true表示查看之前的日志
kubectl logs --previous=true pod名称 -c 容器组名称 -n 命名空间
k8s的yaml文件配置详解
缩进标识层级关系
不支持制表符缩进,使用空格缩进
通常开头缩进两个空格
字符后缩进一个空格, 如冒号,逗号,- 等
“—”表示YAML格式,一个文件的开始,用于分隔文件间。
“#”表示注释
Service
apiVersion: v1
kind: Service
metadata: #元数据
name: string #名称
namespace: string #命名空间
labels: #标签信息
k8s.kuboard.cn/layer: ''
k8s.kuboard.cn/name: string
annotations: #注释信息
k8s.kuboard.cn/workload: string
spec: #定义Service模板
clusterIP: ip address #指定svcip地址 不指定则随机
=================================================================================================
#NodePort类型:集群外网络
type: NodePort #类型为NodePort
ports:
- name: string
nodePort: 30001 #当type = NodePort时,指定映射到物理机的端口号
port: 80 #服务监听的端口号
protocol: TCP #端口协议,支持TCP和UDP,默认TCP
targetPort: 80 #需要转发到后端Pod的端口号
==================================================================================================
#ClusterIP类型: 集群内网络
type: ClusterIP #
ports:
- name: string
port: 80
protocol: TCP
targetPort: 80
- name: string
port: 22
protocol: TCP
targetPort: 22
selector: #label selector配置,将选择具有label标签的Pod作为管理
k8s.kuboard.cn/layer: ''
k8s.kuboard.cn/name: string
sessionAffinity: None #是否支持session
Deployment
apiVersion: apps/v1
kind: Deployment
metadata: #元数据
name: string #名称
namespace: string #命名空间
labels: #标签信息
name: string
annotations: #注释信息
deployment.kubernetes.io/revision: '1'
k8s.kuboard.cn/ingress: 'false'
k8s.kuboard.cn/service: NodePort
k8s.kuboard.cn/workload: string
spec: #定义容器模板,该模板可以包含多个容器
replicas: 3 #副本数量
selector: #标签选择器
matchLabels:
k8s.kuboard.cn/layer: ''
k8s.kuboard.cn/name: string
strategy: #滚动升级策略
type: RollingUpdate #类型
rollingUpdate: #由于replicas为3,则整个升级,pod个数在2-4个之间
maxSurge: 25% #滚动升级时会先启动25%pod
maxUnavailable: 25% #滚动升级时允许的最大Unavailable的pod个数
template: #镜像模板
metadata: #元数据
labels: #标签
k8s.kuboard.cn/layer: ''
k8s.kuboard.cn/name: string
spec: #定义容器模板,该模板可以包含多个容器
containers: #容器信息
- name: string #容器名称
image: url:version #镜像名称:版本号
imagePullPolicy: Always #镜像下载策略
ports:
- name: http
containerPort: 80
protocol: TCP
env
resources: #CPU内存限制
limits: #限制cpu内存
cpu: 200m
memory: 200m
requests: #请求cpu内存
cpu: 100m
memory: 100m
securityContext: #安全设定
privileged: true #开启享有特权
volumeMounts: #挂载volumes中定义的磁盘
- name: html #挂载容器1
mountPath: /var/www/html
- name: session #挂载容器1
mountPath: /var/lib/php/session
volumes: #在该pod上定义共享存储卷列表
- name: html #共享存储卷名称 (volumes类型有很多种)
persistentVolumeClaim: #volumes类型为pvc
claimName: html #关联pvc名称
- name: session
persistentVolumeClaim:
claimName: session
restartPolicy: Always #Pod的重启策略
#Always表示一旦不管以何种方式终止运行,
#kubelet都将重启,
#OnFailure表示只有Pod以非0退出码退出才重启,
#Nerver表示不再重启该Pod
schedulerName: default-scheduler #指定pod调度到节点
Pod
apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中
kind: Pod #指定创建资源的角色/类型
metadata: #资源的元数据/属性
name: string #资源的名字,在同一个namespace中必须唯一
labels: #设定资源的标签,使这个标签在service网络中备案,以便被获知
name: string
annotations: #设置自定义注解列表
- name: String #设置自定义注解名字
spec: #设置该资源的内容
restartPolicy: Always/Never/OnFailure #Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
nodeSelector: #选择node
key:value #通过key-value的方式映射。
containers:
- name: string #容器的名字
image: string:version #容器使用的镜像地址
imagePullPolicy: Always/Never/IfNotPresent #三个选择Always、Never、IfNotPresent,每次启动时检查和更新(从registery)images的策略,
# Always,每次都检查
# Never,每次都不检查(不管本地是否有)
# IfNotPresent,如果本地有就不检查,如果没有就拉取
command: ['sh'] #启动容器的运行命令,将覆盖容器中的Entrypoint,对应Dockefile中的ENTRYPOINT
args: ["$(str)"] #启动容器的命令参数,对应Dockerfile中CMD参数
env: #指定容器中的环境变量
- name: str #变量的名字
value: "/etc/run.sh" #变量的值
resources: #资源管理
requests: #容器运行时,最低资源需求,也就是说最少需要多少资源容器才能正常运行
cpu: 0.1 #CPU资源(核数),两种方式,浮点数或者是整数+m,0.1=100m,最少值为0.001核(1m)
memory: 32Mi #内存使用量
limits: #资源限制
cpu: 0.5
memory: 32Mi
ports:
- containerPort: 8080 #容器开发对外的端口
name: uwsgi #名称
protocol: TCP
livenessProbe: #pod内容器健康检查的设置
httpGet: #通过httpget检查健康,返回200-399之间,则认为容器正常
path: / #URI地址
port: 8080
#host: 127.0.0.1 #主机地址
scheme: HTTP
initialDelaySeconds: 180 #表明第一次检测在容器启动后多长时间后开始
timeoutSeconds: 5 #检测的超时时间
periodSeconds: 15 #检查间隔时间
#也可以用这种方法
#exec: 执行命令的方法进行监测,如果其退出码不为0,则认为容器正常
# command:
# - cat
# - /tmp/health
#也可以用这种方法
#tcpSocket: //通过tcpSocket检查健康
# port: number
lifecycle: #生命周期管理(钩子)
postStart: #容器运行之前运行的任务
exec:
command:
- 'sh'
- 'yum upgrade -y'
preStop: #容器关闭之前运行的任务
exec:
command: ['service httpd stop']
volumeMounts: #挂载设置
- name: volume #挂载设备的名字,与volumes[*].name 需要对应
mountPath: /data #挂载到容器的某个路径下
readOnly: True
volumes: #定义一组挂载设备
- name: volume #定义一个挂载设备的名字
#meptyDir: {}
hostPath:
path: /opt #挂载设备类型为hostPath,路径为宿主机下的/opt