K8S运行应用

基础环境

操作系统:CentOS Linux release 7.4.1708 (GUI)

docker版本: 17.03.2-ce

socat版本:1.7.3.2-2.el7.x86_64

kubelet版本: 1.9.9-9.x86_64

kubernetes-cni版本: 0.6.0-0.x86_64

kubectl版本: 1.9.0-0.x86_64

kubeadm版本: 1.9.0-0.x86_64

集群信息

node1.domain Ready master 24d v1.9.0

node2.domain Ready < none> 24d v1.9.0

node3.domain Ready < none> 24d v1.9.0

1、运行Deployment

1)、运行一个Nginx:

Deployment部署的副本pod分布在各个Node上,每个Node可运行几个副本。

# kubectl run nginx-deployment –image=nginx:1.7.9 –replicas=2

增加一个副本:

# kubectl scale deployments/nginx-deployment –replicas=3

查看nginx-deployment状态:

# kubectl get deployment nginx-deployment

运行一个Nginx

可以查看副本状态:

# kubectl describe replicaset
describe replicaset

可以查看pod状态:

# kubectl get pod

 get pod

可以查看pod详细信息:

# kubectl describe pod podname

describe pod

也可以通过配置文件的方式运行:

创建一个名为nginx.yml的文件,包含如下内容(缩进严格控制):

apiVersion: extensions/v1beta1              #当前配置格式版本
kind: Deployment                                #创建资源类型
metadata:                                       #资源元数据,name是必须项
  name: nginx-deployment
spec:                                           #资源规格说明
  replicas: 3                                   #副本数量
  template:                                 #定义pod模板
    metadata:                                   #pod元数据,至少一个label
      labels:
        app: web_server
    spec:                                       #pod规格说明
      containers:
      - name: nginx
        image: nginx:1.7.9

用配置文件创建应用:

# kubectl apply -f nginx.yml

配置文件创建应用

2)、伸缩

Deployment
nginx-deployment配置文件初始是三个副本,修改replicas为5个,再次执行kubectl apply

伸缩

让master运行pod

# kubectl taint node k8s-master node-role.kubernetes.io/master-

master only

# kubectl taint node k8s-master node-role.kubernetes.io/master=”“:NoSchedule

3)、用label控制pod位置

默认情况,scheduler会将pod调度至所有可用节点,可指定pod至特定node

配置节点label:

# kubectl label node node2.domain disktype=ssd

查看节点label

# kubectl get node –show-labels

show-labels

编辑配置文件nginx.yml,增加nodeSelector配置项后执行kubectl apply:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 5
  template: 
    metadata:
      labels:
        app: web_server
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
      nodeSelector:
        disktype: ssd

查看labels

删除节点 label

# kubectl label node node2.domain disktype-

2、运行DaemonSet

DaemonSet部署的副本pod可分布在各个Node上,每个Node最多只能运行一个副本。

1)、运行一个NodeExporter:

直接在docker中运行NodeExporter容器:

# docker run -d -v “/proc:/host/proc” -v “/sys:/host/sys” -v “/:/rootfs” –net=host prom/node-exporter –path.procfs /host/proc –path.sysfs /host/sys –collector.filesystem.ignored-mount-points “\^/(sys|proc|dev|host|etc)($|/)”

通过YAML配置文件的方式运行pod,创建一个名为node_exporte.yml的文件,包含如下内容(缩进严格控制):

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: node-exporter-daemonset
spec:
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      hostNetwork: true                             #直接使用Host网络
      containers:
      - name: node-exporter
        image: prom/node-exporter
        imagePullPolicy: IfNotPresent
        command:                                        #设置容器启动命令
        - /bin/node_exporter
        - --path.procfs
        - /host/proc
        - --path.sysfs
        - /host/sys
        - --collector.filesystem.ignored-mount-points
        - ^/(sys|proc|dev|host|etc)($|/)
        volumeMounts:                               #映射Host路径至容器
        - name: proc
          mountPath: /host/proc
        - name: sys
          mountPath: /host/sys
        - name: root
          mountPath:  /rootfs
      volumes:
      - name: proc
        hostPath:
          path: /proc
      - name: sys
        hostPath:
          path: /sys
      - name: root
        hostPath:
          path: /

执行kubectl apply,查看pod 状态:

查看pod

3、运行Job

容器按照持续时间可以分为两类:服务类容器和工作类容器。

服务类容器通常持续提供服务,工作类容器则是一次性任务,完成后容器就退出。

1)、运行一个job

创建一个名为myjob.yml的文件,包含如下内容(缩进严格控制):

apiVersion: batch/v1                    #Job的apiVersion
kind: Job                               #资源类型
metadata:
  name: myjob
spec:
  template:
    metadata:
      name: myjob
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echo", "hello k8s job!"]
      restartPolicy: Never          #指定重启方式(对于job只能设置为Never或者OnFailure)

执行kubectl apply

apply

通过kubectl get job 查看job状态:

get job

通过kubectl get pod –show-all 查看,因为pod执行完毕后已经退出

show-all

通过kubectl logs 查看pod标准输出:

kubectl logs

Pod失败的情况,创建一个名为myjobF.yml的文件,包含如下内容(缩进严格控制):

apiVersion: batch/v1
kind: Job
metadata:
  name: myjobf
spec:
  template:
    metadata:
      name: myjobf
    spec:
      containers:
      - name: hellof
        image: busybox
        command: ["invalid command","hello k8s job!"]
      restartPolicy: Never

执行kubectl apply,查看job状态:

apply

查看pod状态:

pod状态

多个pod处于非正常状态,通过kubectl describe pod查看某个pod日志:

某个pod日志

删除pod:

# kubectl delete -f myjobF.yml

修改myjobF.yml配置,将restartPolicy: Never修改为restartPolicy:OnFailure,执行kubectl apply

apply

查看pod状态:

pod状态

2)、job并行性

同时运行两个pod:

修改myjob.yml配置,添加配置parallelism: 2,执行kubectl apply

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  parallelism: 2
  template:
    metadata:
      name: myjob
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echo", "hello k8s job!"]
      restartPolicy: OnFialure

apply

每次运行两个pod,直到6个pod成功完成:

修改myjob.yml配置,添加配置completion: 6,执行kubectl apply

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  completions: 6
  parallelism: 2
  template:
    metadata:
      name: myjob
    spec:
      containers:
      - name: hello
        image: busybox
        command: ["echo", "hello k8s job!"]
      restartPolicy: OnFailure

status

3)、定时job

修改配置文件 /etc/kubernetes/manifests/kube-apiserver.yaml,添加一行:

- –runtime-config=batch/v2alpha1=true

重启kubectl.service

通过kubectl api-versions查看:

api-versions

创建CronJob

创建一个名为cronjob.yml的文件,包含如下内容(缩进严格控制):

apiVersion: batch/v2alpha1              #当前CronJob的apiVersion
kind: CronJob                                   #指定资源类型
metadata:
  name: cronjob
spec:
  schedule: "*/1 * * * *"                   #定时crond,格式Linux一致
  jobTemplate:                              #Job模板,与普通Job一致
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            command: ["echo", "hello k8s job!"]
          restartPolicy: OnFailure

执行kubectl apply,通过kubectl get cronjob查看状态,kubectl get
jobs查看job执行情况:

查看job执行情况

通过kubectl get pods –show-all 查看job:

show-all

通过kubectl logs pod 查看执行结果:

查看执行结果

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐