docker-k8s-创建副本

通过命令创建(以后版本取消)

[root@node1 ~]# kubectl run httpd-app --image=httpd --replicas=2
Flag --replicas has been deprecated, has no effect and will be removed in the future.
pod/httpd-app created
# 提示以后的版本会删除此命令

查看副本运行情况

 [root@node1 ~]# kubectl get pod -o wide
NAME        READY   STATUS    RESTARTS   AGE    IP           NODE    NOMINATED NODE   READINESS GATES
httpd-app   1/1     Running   0          108s   10.244.2.2   node2   <none>           <none>

通过 yml文件创建

用deployment 创建一个简单的nginx

[root@node1 ~]# vim nginx.yml
apiVersion: apps/v1  # 这是api版本号 不同的apiVersion可以实现不同的功能
kind: Deployment #要创建的资源类型 如Deployment/Pod/ReplicaSet/StatefulSet/DaemonSet
metadata: #元数据对象 ,该资源的基本属性和信息
  name: nginx-deployment #定义该资源的名称
spec: #定义期望状态
  selector: # 
    matchLabels: # 标签选择器 和 selector共用
     app: nginx # 标签名
  replicas: 5 #创建的副本数量
  template: # 选择或创建的pod模板
    metadata: # Pod的元数据,Pod的信息
      labels: # pod的标签
        app: nginx #标签名 这个app必须和上面指定的app的标签名一样,要不然不会在一个pod中 但是这个 app和nginx是可以随意写的只要和上面的相同即可
    spec: # 定义期望状态 ,详细的创建信息
      containers: # 定义容器的列表
      - name: nginx #容器名
        image: nginx:1.8 # 容器镜像
        ports: #端口
        - containerPort: 80 #指定监控的端口

启动nginx副本

[root@node1 ~]# kubectl apply -f nginx.yml 
deployment.apps/nginx-deployment created

# 查看
[root@node1 ~]# kubectl get deployments.apps -o wide
NAME               READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES      SELECTOR
nginx-deployment   5/5     5            5           97s   nginx        nginx:1.8   app=nginx
# 启动了5个副本

[root@node1 ~]# kubectl get pod -o wide
NAME                                READY   STATUS             RESTARTS   AGE     IP                NODE    NOMINATED NODE   READINESS GATES
nginx-deployment-5f8c6846ff-4x8nh   1/1     Running            0          23m     10.244.2.3        node2   <none>           <none>
nginx-deployment-5f8c6846ff-fs82r   1/1     Running            0          23m     10.244.1.3        node3   <none>           <none>
nginx-deployment-5f8c6846ff-mdrwq   1/1     Running            0          23m     10.244.2.5        node2   <none>           <none>
nginx-deployment-5f8c6846ff-mrv2x   1/1     Running            0          23m     10.244.2.4        node2   <none>           <none>
nginx-deployment-5f8c6846ff-w5lbj   1/1     Running            0          23m     10.244.1.2        node3   <none>           <none>

用daemonset创建一个 node-export

  • 其实和 docker run的命令差不多就是转换成 yml来写
    [root@node1 ~]# vim node-export.yml
    apiVersion: apps/v1 # 这是api版本号 不同的apiVersion可以实现不同的功能
    kind: DaemonSet  #要创建的资源类型 如Deployment/Pod/ReplicaSet/StatefulSet/DaemonSet
    metadata: #元数据对象 ,该资源的基本属性和信息
      name: node-exporter-daemonset #定义该资源的名称
    spec: #定义期望状态
      selector:
        matchLabels: # 标签选择器 和 selector共用
          name: promethues # 标签名
      template: # 选择或创建的pod模板
        metadata:  # Pod的元数据,Pod的信息
          labels: # pod的标签
            name: promethues #标签名 这个name可以随便写 promethues也随便写
        spec: # 定义期望状态 ,详细的创建信息
          hostNetwork: true  # 表示直接使用节点中的主机网络,相当于docker的host网络
          containers:   # 定义容器的列表
          - name: node-exporter  #容器名
            image: prom/node-exporter # 容器镜像
            imagePullPolicy: IfNotPresent  # 容器的下载策略 (IfNotPresent(没有镜像时下>载) | Never(从不下载) | Always(总是下载))
            command: # 运行容器时执行的命令 运行程序==dockerfile中的ENTRYPOINT,或者docker run时最后跟的/bin/bash等命令,
                     # 会替代dockerfile中cmd和ENTRYPOINT执行的命令
            - /bin/node_exporter
            - --path.procfs
            - /host/proc
            - --path.sysfs
            - /host/sys
            - --collector.filesystem.ignored-mount-points
            - ^/(sys|proc|dev|host|etc|)($|\)
            volumeMounts:  # 用来指定容器内的路径
            - name: proc # 定义路径名
              mountPath: /host/proc #这里是容器真实的路径
            - name: sys
              mountPath: /host/sys
            - name: root
              mountPath: /rootfs
    

    创建副本

    [root@node1 ~]# kubectl apply -f node-export.yml 
    daemonset.apps/node-exporter-daemonset created
    
    # 查看
    [root@node1 ~]# kubectl get daemonsets.apps -o wide
    NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS      IMAGES               SELECTOR
    node-exporter-daemonset   2         2         0       2            0           <none>          77s   node-exporter   prom/node-exporter   name=promethues
    # 每个node主机各有一个pod
    
    
    [root@node1 ~]# kubectl get pod -o wide
    NAME                                READY   STATUS             RESTARTS   AGE     IP                NODE    NOMINATED NODE   READINESS GATES
    node-exporter-daemonset-59ncz       0/1     CrashLoopBackOff   8          20m     192.168.100.213   node3   <none>           <none>
    node-exporter-daemonset-84wpm       0/1     CrashLoopBackOff   8          20m     192.168.100.212   node2   <none>           <none>
    

用Daemonset创建 CAdviser

apiVersion: apps/v1 # 这是api版本号 不同的apiVersion可以实现不同的功能
kind: DaemonSet  #要创建的资源类型 如Deployment/Pod/ReplicaSet/StatefulSet/DaemonSet
metadata: #元数据对象 ,该资源的基本属性和信息
  name: cadvisor #定义该资源的名称
spec: #定义期望状态
  selector:
    matchLabels: # 标签选择器 和 selector共用
      name: cadvisor # 标签名
  template: # 选择或创建的pod模板
    metadata:  # Pod的元数据,Pod的信息
      labels: # pod的标签
        name: cadvisor #标签名 这个name可以随便写 promethues也随便写
    spec: # 定义期望状态 ,详细的创建信息
      hostNetwork: true  # 表示直接使用节点中的主机网络,相当于docker的host网络
      containers:   # 定义容器的列表
      - name: cadvisor  #容器名 
        image: google/cadvisor # 容器镜像
        imagePullPolicy: IfNotPresent  # 容器的下载策略 (IfNotPresent(没有镜像时下>载) | Never(从不下载) | Always(总是下载))
        volumeMounts:  # 用来指定容器内的路径
        - name: run # 定义路径名
          mountPath: /var/run #这里是容器真实的路径
        - name: sys
          mountPath: /sys
        - name: docker
          mountPath: /var/lib/docker
        - name: root
          mountPath: /rootfs
      volumes: # 指定对应name的物理机路径,缩进与上方的containers对齐
      - name: run #对应 voluemMounts的name
        hostPath: # 主机的路径
          path: /var/run # 制定主机内的路径 mount挂载到容器内
      - name: sys
        hostPath:
          path: /sys
      - name: docker
        hostPath:
          path: /var/lib/docker
      - name: root
        hostPath:
          path: /

创建副本

 [root@node1 ~]# kubectl apply -f cadvistor.yml 
 daemonset.apps/cadvisor created

 ## 查看
 [root@node1 ~]# kubectl get daemonsets.apps -o wide
NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE     CONTAINERS      IMAGES               SELECTOR
cadvisor                  2         2         2       2            2           <none>          4m10s   cadvisor        google/cadvisor      name=cadvisor


[root@node1 ~]# kubectl get pod -o wide
NAME                                READY   STATUS             RESTARTS   AGE     IP                NODE    NOMINATED NODE   READINESS GATES
cadvisor-mm4wn                      1/1     Running            0          4m37s   192.168.100.213   node3   <none>           <none>
cadvisor-pfzms                      1/1     Running            0          4m37s   192.168.100.212   node2   <none>           <none>

查看pod方法

kubectl get deployments.apps -o wide 
# 可以查看到 以deployment运行的副本

Kubectl get rs 
# 可以查看到deployment创建的副本数量(Replicaset)	

Kubect get pod –o wide
# 查看已运行的pod

Kubectl get pod --show-labels
# 查看pod的labels标签

Kubect delete –f nginx.yml
# 删除使用文件创建的deployment的方法

kubectl describe pod nginx-deployment
# 查看pod创建的过程

本博客所有文章是以学习为目的,如果有不对的地方可以一起交流沟通共同学习 邮箱:1248287831@qq.com!