11月18

k8s常用操作

| |
14:26运维管理  From: 本站原创
架构
点击在新窗口中浏览此图片
组件基本交流流程
点击在新窗口中浏览此图片
核心对象
点击在新窗口中浏览此图片
k8s常见操作

创建配置
$ vim examplepod.yml
在文件中填入如下内容并保存。


apiVersion: v1
kind: Pod
metadata:
  name: examplepod
spec:
  containers:
  - name: examplepod-container
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c']
    args: ['echo "Hello Kubernetes!"; sleep 3600']
执行一个service

$ kubectl apply -f examplepod.yml
获取执行中的pod

$ kubectl get pod
获取单个pod

$ kubectl get pod {Pod名称}
持续监控
$ kubectl get pod {Pod名称} -w
详细参数
$ kubectl get pod {Pod名称} -o wide
输出详细参数
$ kubectl get pod examplepod --output yaml
$ kubectl get pod examplepod --output json
查看详细信息
$ kubectl describe pods {Pod名称}
查看日志
$ kubectl logs {Pod名称}
修改pod
$ kubectl replace -f {pod模板路径}
强制修改

kubectl replace -f example.yaml  --force
删除pod

$ kubectl delete pod {Pod名称}
模板删除

$ kubectl delete -f {模板文件名称}



pod模板详解

apiVersion: v1            #版本,必填,v1代表稳定版本
kind: pod                 #类型,必填,Pod
metadata:                 #元数据,表示资源的标识信息
  name: String            #元数据,必填,Pod的名字
  namespace: String       #元数据,Pod的命名空间
  labels:                 #元数据,标签列表
    - key: value          #元数据,可定义多个标签的键/值对
  annotations:            #元数据,自定义注解列表
    - key: value          #元数据,可定义多个注解的键/值对
spec:                     #Pod中容器的详细定义,必填
  containers:             #Pod中的容器列表,必填,可以有多个容器
  - name: String          #容器名称,必填
    image: String         #容器中的镜像地址,必填
    imagePullPolicy: [Always|Never|IfNotPresent]#获取镜像的策略,Always表示下载镜像;
    #IfNotPresent表示优先使用本地镜像,否则下载镜像;Never表示仅使用本地镜像
    command: [String]     #容器的启动命令列表(不配置的话,使用镜像内部的命令)
    args: [String]        #启动命令参数列表
    workingDir: String    #容器的工作目录
    volumeMounts:         #挂载到容器内部的存储卷设置
    - name: String        #为了引用Pod定义的共享存储卷的名称,要用volumes[]部分定义的卷名
      mountPath: String   #存储卷在容器内挂载的绝对路径,应少于512个字符
      readOnly: boolean   #是否为只读模式
    ports:                #容器需要暴露的端口号列表
    - name: String        #端口名称
      containerPort: int  #容器要暴露的端口
      hostPort: int       #容器所在主机监听的端口(把容器暴露的端口映射到宿主机的端口)
      protocol: String    #端口协议,支持TCP和UDP,默认为TCP
    env:                  #容器运行前要设置的环境变量列表
    - name: String        #环境变量名称
      value: String       #环境变量值
    resources:            #资源限制和请求的设置
      limits:             #资源限制的设置
        cpu: String       #CPU的限制,单位为CPU内核数。将用于docker run --cpu-quota 参数,
        #也可以使用小数,例如0.1,0.1等价于表达式100m,表示100milicpu
        memory: String    #内存限制,单位可以为MiB/GiB/MB/GB(1MiB=1024×1024B,
        #1MB=1000×1000B),将用于docker run --memory参数
      requests:           #资源请求的设置
        cpu: String       #CPU请求,容器启动时的初始可用数量,将用于docker run --cpu-shares参数
        memory: String    #内存请求,容器启动时的初始可用数量
    livenessProbe:        #Pod内容器健康检查的设置,当探测几次无响应后将自动重启该容器,
    #检查方法有exec、httpGet和tcpSocket,对一个容器只要设置一种方法即可
      exec:               #通过exec方式来检查Pod内各容器的健康状况
        command: [String] #exec方式需要指定的命令或脚本
      httpGet:            #通过httpGet方式来检查Pod中各容器的健康状况,需要指定path、port
        path: String
        port: number
        host: String
        scheme: String
        httpHeaders:
        - name: String
          value: String
      tcpSocket:             #通过tcpSocket检查Pod中各容器的健康状况
        port: number
      initialDelaySeconds: 0 #容器启动完成后,首次探测的时间(单位为秒)
      timeoutSeconds: 0      #对容器进行健康检查时探测等待响应的超时时间(单位为秒,默认为1s)
      periodSeconds: 0       #对容器监控检查的定期探测时间设置(单位为秒),默认10s一次
      successThreshold: 0
      failureThreshold: 0
      securityContext:       #安全配置
        privileged: false
    restartPolicy: [Always|Never|OnFailure]#Pod的重启策略,Always表示不管以何种方式终止
    #运行,kubelet都将重启;OnFailure表示只有Pod以非0码退出才重启;Never表示不再重启该Pod
    nodeSelector: object     #节点选择,设置nodeSelector表示将该Pod调度到包含这个标签的
    #节点上,以key:value格式来指定
    imagePullSecrets:        #拉取镜像时使用的secret名称,以key:secretkey格式指定
    - name: String
    hostNetwork: false       #是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
  volumes:                   #在该Pod上定义共享存储卷列表
  - name: String             #共享存储卷名称
    emptyDir: {}             #类型为emptyDir的存储卷,与Pod有相同生命周期的一个临时目录,为空值
    hostPath:                #类型为hostPath的存储卷,将会挂载Pod所在宿主机的目录
      path: string           #Pod所在宿主机的目录,该目录将在容器中挂载
    secret:                  #类型为secret的存储卷,在容器内部挂载集群中预定义的secret对象
      secretName: String
      items:
      - key: String
        path: String
    configMap:               #类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
      name: String
      items:
      - key: String
        path: String

查看pod支持的资源
kubectl explain pod
点击在新窗口中浏览此图片
查看资源目录细节
kubectl explain pod.status
点击在新窗口中浏览此图片
常见pod控制器
Deployment控制器
Deployment控制器以ReplicaSet控制器为基础,是更高级的概念,增加了更灵活的生命周期管理功能
1.1 创建模板
$ vim exampleDeploymentv1.yml
增加配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: exampledeployment
spec:
replicas: 3
selector:
matchLabels:
   example: deploymentfornginx
template:
metadata:
   labels:
     example: deploymentfornginx
spec:
   containers:
   - name: nginx
     image: nginx:1.7.9
     ports:
     - containerPort: 80

●apiVersion表示使用的API版本,apps/v1表示使用Kubernetes API的稳定版本。□kind表示要创建的资源对象,这里使用关键字Deployment。□metadata表示该资源对象的元数据。一个资源对象可拥有多个元数据,其中一项是name,它表示当前资源的命名。□spec表示该资源对象的具体设置。
●replicas:表示在控制器下托管的Pod需要保持的副本数量。
●selector/matchLabels:用于定义一个或多个自定义标签(label),其形式为键值对。它对Pod起筛选作用,会选择与标签定义相匹配的Pod。这在后续章节会详细解说,因为它是必填字段,所以这里填写了一个示例值。
●template:Pod模板,具体的模板定义详见第4章。

1.2 通过模板创建控制器

$ kubectl apply -f exampleDeploymentv1.yml --record
1.3 查看控制器

$ kubectl get deployments
可以通过

kubectl get pod
kubectl get pods -o wide
查看更多详细信息

1.4 查看详细信息

$ kubectl describe deployments {Deployment名称}

来源:Heck's Blog
地址:https://www.heckjj.com/post/563/
转载时须以链接形式注明作者和原始出处及本声明,否则将追究法律责任,谢谢配合!
阅读(717) | 评论(0) | 引用(0)