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!