1、运行Deployment
kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 #部署包含两个deployment nginx-deployment 容器的images为nginx:1.7.9
kubectl get deployment nginx-deployment #查看nginx-deployment的状态
kubectl describe deployment nginx-deployment # 查看详细的nginx-deployment状态
kubectl get replicaset #查看replicaset
kubectl describe replicaset nginx-deployment-6fb585c4cc #查看nginx-deployment-6fb585c4cc详细信息
Controlled By 指明此ReplicaSet是由Deploymnet nginx-deployment创建的。
kubectl get pod #查看pod
kubectl describe pod nginx-deployment-6fb585c4cc-m4tp8 #查看nginx-deployment-6fb585c4cc-m4tp8详细情况
Controlled By 指明此 Pod 是由 nginx-deployment-6fb585c4cc 创建。Events 记录了 Pod 的启动过程。
总结一下这个过程:用户通过 kubectl 创建 Deployment。Deployment 创建 ReplicaSet。ReplicaSet 创建 Pod。
对象的命名方式是:子对象的名字 = 父对象名字 + 随机字符串或数字
2、命令VS配置文件
Kubernetes 支持两种方式创建资源:
1.用 kubectl 命令直接创建,比如:kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2在命令行中通过参数指定资源的属性。
2.通过配置文件和 kubectl apply 创建,要完成前面同样的工作,可执行命令:kubectl apply -f nginx.ymlnginx.yml 的内容为:
3、Deployment配置文件简介
① apiVersion 是当前配置格式的版本。
② kind 是要创建的资源类型,这里是 Deployment。
③ metadata 是该资源的元数据,name 是必需的元数据项。
④ spec 部分是该 Deployment 的规格说明。
⑤ replicas 指明副本数量,默认为 1。
⑥ template 定义 Pod 的模板,这是配置文件的重要部分。
⑦ metadata 定义 Pod 的元数据,至少要定义一个 label。label 的 key 和 value 可以任意指定。
⑧ spec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。
kubectl delete deployment nginx-deployment 或者 kubectl delete -f nginx.yml #删除nginx应用
4、伸缩
直接修改nginx.yml 将relicas 修改成 对应的数字,然后执行kubectl apply -f nginx.yml出于安全考虑,默认配置下 Kubernetes 不会将 Pod 调度到 Master 节点。
如果希望将 master 也当作 Node 使用,可以执行如下命令:kubectl taint node masterName node-role.kubernetes.io/master-如果要恢复 Master Only 状态,执行如下命令:kubectl taint node masterName node-role.kubernetes.io/master="":NoSchedule
5、用label控制pod的位置
kubectl label node node1 disktype=ssd #定义node1为disktype
kubectl get node --show-labels #查看节点label重新定义nginx.yml将pod部署到node1
[k8s@master ~]$ kubectl apply -f nginx.yml
kubectl label node node1 disktype- #删除node label disktype删除label不会影响原来部署的pod
6、DaemonSet
特点:每个 Node 上最多只能运行一个副本。DaemonSet 的典型应用场景有:在集群的每个节点上运行存储 Daemon,比如 glusterd 或 ceph。在每个节点上运行日志收集 Daemon,比如 flunentd 或 logstash。在每个节点上运行监控 Daemon,比如 Prometheus Node Exporter 或 collectd。
kubectl get daemonset --namespace=kube-system # 查看DaemonSet运行的系统组件kubectl edit deployment nginx-deployment 查看资源配置和运行状态
运行自己的daemonset
运行prometheus监控
① 直接使用 Host 的网络。
② 设置容器启动命令。
③ 通过 Volume 将 Host 路径 /proc、/sys 和 / 映射到容器中。我们将在后面详细讨论 Volume。
执行:kubectl apply -f node_exporter.yml
7、Job
服务类容器
Deployment、ReplicaSet、DaemonSet
http server ,daemon
工作类容器
Job
一次性任务
① batch/v1 是当前 Job 的 apiVersion。
② 指明当前资源的类型为 Job。
③ restartPolicy 指定什么情况下需要重启容器。对于 Job,只能设置为 Never 或者 OnFailure。对于其他 controller(比如 Deployment)可以设置为 Always 。
Job的并行性
parallelism:设置并行运行pod数量
completions:设置完成pod总数
定时Job
① batch/v2alpha1 是当前 CronJob 的 apiVersion。
② 指明当前资源的类型为 CronJob。
③ schedule 指定什么时候运行 Job,其格式与 Linux cron 一致。这里 */1 * * * * 的含义是每一分钟启动一次。
④ jobTemplate 定义 Job 的模板,格式与前面 Job 一致。
Kubernetes 默认没有 enable CronJob 功能,需要在 kube-apiserver 中加入这个功能。方法很简单,修改 kube-apiserver 的配置文件 /etc/kubernetes/manifests/kube-apiserver.yaml:
然后重启 kubelet 服务:systemctl restart kubelet
#kubectl api-versions 查看是否支持batch/v2alpha1