1用Deployment运行应用
Kubernetes通过各种Controller来管理Pod的生命周期。为了满足不同业务场景,Kubernetes开发了Deployment、ReplicaSet、StatefuleSet、Job等多种Controller。
首先使用最常用的Deployment。
[root@master ~] kubectl run nginx-deploy --image=nginx --replicas=2
查看
[root@master ~] kubectl get deployments.apps
查看更加详细的信息:
[root@master ~]# kubectl get deployments.apps
查看副本集:
[root@master nginx]# kubectl get replicasets.apps nginx-deploy-dc9ff4b8c
NAME DESIRED CURRENT READY AGE
nginx-deploy-dc9ff4b8c 2 2 2 29m
查看详细的副本集信息:
[root@master ~]# kubectl describe replicasets.apps nginx-deploy-dc9ff4b8c
Controlled By指明此Pod是由ReplicaSet nginx-deployment-6c94df7599创建。Events纪录了Pod的启动过程。如果操作失败(比如image不存在),也能在这里查看到原因。
总结一下这个过程:
1)用户通过kubectl创建Deployment。
2)Deployment创建ReplicaSet.
3)ReplicaSet创建Pod。
对象的命名方式是:子对象的名称=父对象的名字+随机字符串或数字。
查看pod
[root@master nginx]# kubectl get pod
2、k8s创建资源的两种方式
命令vs配置文件
Kubernetes支持两种方式创建资源:
①用kubectl命令直接创建,比如:kubectl run nginx-deployment --image=nginx --replicas=2在命令行中通过参数指定资源的属性。
②通过配置文件和kubectl apply创建,要完成前面的工作,然后执行命令,比如:kubectl apply -f nginx.yml。
命令与配置文件这两种方式的比较:
·基于命令的方式:
①简单直接快捷,上手快。
②适合临时测试或实验。
·基于配置文件的方式:
①配置文件描述了什么,即应用最终要达到的状态。
②配置文件提供了创建资源的模板,能够重复部署。
③可以像管理代码一样管理部署。
④适合正式的、跨环境的、规模化部署。
⑤这种方式要求熟悉配置文件的语法,有一定难度。
kubectl apply不但能够创建Kubernetes资源,也能对资源进行更新,非常方便。不过Kubernetes还提供了几个类似的命令,例如kubectl create、kubectl replace、kubectl edit和kubectl patch。
配置文件内容较多 语句也比较多 也可以用这个方式获得模板:
[root@master ~]# kubectl create deployment test --image=nginx --dry-run -o yaml > nginx.yml
创键一个deployment 名字叫test 镜像是nginx 现在不执行 保存的格式为yaml
保存到nginx.yml这个文件里
①apiVersion:当前配置格式的版本。
②kind:要创建的资源类型,这里是Deployment。
③metadata:该资源的元数据,name是必须的元数据项。
④spec:该Deployment的规格说明。
⑤replicas:指明副本数量,默认为1。
⑥template:定义Pod的模板,这是配置文件的重要部分。
⑦metadata:定义Pod的元数据,至少要定义一个label。label的key和value可以任意指定。
⑧spec:描述Pod的规格,此部分定义Pod中每一个容器的属性,name和image是必须的。
此nginx.yml是一个最简单的Deployment配置文件。
查看yml文件里配置格式的版本
[root@master nginx]# kubectl api-versions
创键一个yml文件:
mkdir nginx
[root@master nginx]# cat nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deply
name: nginx-deply
spec:
replicas: 2
selector:
matchLabels:
app: nginx-deply
template:
metadata:
labels:
app: nginx-deply
spec:
containers:
- image: nginx
name: nginx
副本的伸缩 只需要修改yml文件的replicas即可 replicas: 5
收缩的话 修改文件nginx.yml replicas: 3
修改配置文件后执行:
kubectl apply -f nginx.yml
查看:
[root@master nginx]# kubectl get pod -o wide
K8s的故障转移:
关掉node1:
[root@node1 ~]# systemctl poweroff
查看节点:
可以看到node1的节点的pod已经停止了
当node1再次上线后停掉的pod会被删除,不会再次回到node1上了
用标签控制pod所在的节点:
添加标签:
[root@master nginx]# kubectl label nodes k8snode1 test=abc
node/node1 labeled
查看:
[root@master nginx]# kubectl get nodes --show-labels
将标签添加到nginx.yml文件里控制pod所在节点:
[root@kmaster nginx]# kubectl apply -f nginx.yml
deployment.apps/nginx-deply configured
查看pod所在节点 是否所有pod在node1上:
[root@master nginx]# kubectl get pod -o wide
把nginx.yml里指定标签的语句去掉pod就会在node1和node2上了