k8s的名称空间标签deployment控制器弹性伸缩

Posted givenchy_yzl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s的名称空间标签deployment控制器弹性伸缩相关的知识,希望对你有一定的参考价值。

一、k8s中的名称空间

k8s中名称空间是用来隔离集群资源,而k8s中的资源也分为名称空间级资源以及集群级资源。
kubectl是k8s客户端,它跟k8s没有任何关系。
kubectl get [资源名称] 获取集群资源的命令

#获取名称空间
[root@k8s-m-01 ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   5d16h
kube-node-lease   Active   5d16h
kube-public       Active   5d16h
kube-system       Active   5d16h
[root@k8s-m-01 ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   5d16h
kube-node-lease   Active   5d16h
kube-public       Active   5d16h
kube-system       Active   5d16h

# 注:部署应用一般是部署在自己的名称空间之内
[root@k8s-m-01 ~]# kubectl create namespace wordpress
namespace/wordpress created

二、标签

一个 Label 是一个 key=value 的键值对,其中 key 与 vaue 由用户自己指定(自定义)。Label 可以附加到各种资源对象上,例如 Node、Pod、Service、RC 等,一个资源对象可以 定义任意数量的 Label,同一个 Label 也可以被添加到任意数量的资源对象上去,Label 通常在资源对象定义时 确定,也可以在对象创建后动态添加或者删除。
我们可以通过指定的资源对象捆绑一个或多个不同的 Label 来实现多维度的资源分组管理功能,以便于灵 活、方便地进行资源分配、调度、配置、部署等管理工作。例如:部署不同版本的应用到不同的环境中;或者监 控和分析应用(日志记录、监控、告警)等。一些常用等 label 示例如下

版本标签:"release" : "stable" , "release" : "canary" 
环境标签:"environment" : "dev" , "environment" : "production" 
架构标签:"tier" : "frontend" , "tier" : "backend" , "tier" : "middleware" 
分区标签:"partition" : "customerA" , "partition" : "customerB" 
质量管控标签:"track" : "daily" , "track" : "weekly

k8s当中的标签是用来管理(识别)一系列容器,方便于管理和监控拥有同一标签的所有容器

# docker中的TAG = 仓库URL/名称空间/仓库名称:版本号

apiVersion: v1
kind: Pod
metadata:
  name: test-tag
  labels:
    release: stable
spec:
  containers:
    - name: nginx
      image: nginx
      
      
# 查看label
[root@k8s-m-01 ~]# kubectl get pod --show-labels

# 增加标签
kubectl label pod(资源类型) test-tag app=tag

[root@k8s-m-01 ~]# kubectl label pod test-tag app=tag
pod/test-tag labeled
[root@k8s-m-01 ~]# kubectl get pod --show-labels 
NAME                     READY   STATUS             RESTARTS   AGE     LABELS
test-tag                 0/1     ImagePullBackOff   0          2m15s   app=tag,release=stable

# 删除标签
[root@k8s-m-01 ~]# kubectl label pod test-tag app-
pod/test-tag labeled

# 修改标签
## 先删除后增加
k8s中标签的命名规范

1、必须小写
2、必须以字母开头
3、名称当中只能够包含字母、数字和中划线(-)

k8s中常用的命令

# 获取资源
kubectl get [资源名称]

# 创建资源
kubectl apply [资源类型] [资源名称]
kubectl apply -f [资源清单的路径]

三、控制器

k8s中控制器分为:deployment、DaemonSet、StatufluSet

控制器使用来做什么的?
- 管理Pod

3.1deployment

Deploymnet在Deployment对象中描述所需的状态,然后Deployment控制器将实际状态以受控的速率更改为所需的状态

Deployment:一般用来部署长期运行的、无状态的应用
特点:集群之中,随机部署

deployment主要功能是保证有足够的pod正常对外提供服务

#编辑deployment配置文件

[root@m01 ~]# vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      release: stable
  template:
    metadata:
      labels:
        release: stable
    spec:
      containers:
        - name: nginx
          image: nginx

#运行
[root@m01 ~]# kubectl apply -f deployment.yaml 
deployment.apps/deployment created

#查看正在运行的容器
[root@m01 ~]# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
deployment-5849786498-jfqrn   1/1     Running   0          3m35s
test                          1/1     Running   0          48m

#查看deployment
[root@m01 ~]# kubectl get deployment.apps
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
deployment   1/1     1            1           4m18s

#删除deployment 
[root@m01 ~]# kubectl delete pod deployment-5849786498-jfqrn
pod "deployment-5849786498-jfqrn" deleted

#过会儿在查看发现系统会自动运行一个deployment
[root@m01 ~]# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
deployment-5849786498-hlb2c   1/1     Running   0          6m21s
test                          1/1     Running   0          59m
3.1.1弹性扩容(缩容)

1、修改配置清单
[root@k8s-m-01 ~]# kubectl edit deployments deployment
修改replicas:后的数量
deployment.apps/deployment edited

2、打标签
#若replicas小于当前容器数,缩容,反之扩容。
[root@k8s-m-01 ~]# kubectl patch deployments.apps deployment -p ‘{“spec”:{“replicas”:40}}’

3、scale
#replicas小于当前容器数,缩容,反之扩容。
[root@k8s-m-01 ~]# kubectl scale deployment/deployment --replicas=4

3.1.2更新

vim nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: django
spec:
replicas: 1
selector:
matchLabels:
app: stable
template:
metadata:
labels:
app: stable
spec:
containers:
- name: nginx2
image: nginx:1.17.10

更新镜像

1、打标签
[root@k8s-m-01 ~]# kubectl patch deployments.apps nginx -p ‘{“spec”:{“template”:{“spec”:{“containers”:[{“image”:“nginx:1.18.0”, “name”:“nginx”}]}}}}’

2、修改配置清单
vim nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: django
spec:
replicas: 1
selector:
matchLabels:
app: stable
template:
metadata:
labels:
app: stable
spec:
containers:
- name: nginx2
image: nginx:1.19.10

3、设置镜像
语法:kubectl set image [资源类型]/资源名称 镜像名称=镜像版本
例:
[root@k8s-m-01 ~]# kubectl set image deployment/nginx nginx=nginx:1.16.0
deployment.apps/django image updated

4、edit
kubectl edit [资源类型] [资源名称]
然后修改对应的template即可

回滚

回滚是为了防止人为误操作后的一种容器保护机制。
kubectl rollout history deployment nginx
[root@k8s-m-01 ~]# kubectl rollout undo deployment nginx
deployment.apps/django rolled back

[root@k8s-m-01 ~]# kubectl rollout undo deployment django --to-revision=1
deployment.apps/django rolled back

k8s的自愈机制

#运行以下命令查看容器正在那台机器上运行
[root@m01 ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE     IP            NODE   NOMINATED NODE   READINESS GATES
test   1/1     Running   0          2m38s   10.244.2.11   n2     <none>           <none>

#到正在运行容器的机器上,执行以下命令
#查看目前机器上有哪些容器在运行
[root@n2 ~]# docker ps
CONTAINER ID   IMAGE                                                 COMMAND                  CREATED          STATUS          PORTS     NAMES
61fb26fab7bd   nginx                                   "/docker-entrypoint.…"   14 minutes ago   Up 14 minutes             k8s_nginx_test_default_d5c1958a-6aa2-4451-9491-4a93fdcda8f6_0

#删除一个容器
[root@n2 ~]# docker rm -f 61fb26fab7bd
61fb26fab7bd

#过十几秒在查看,发现容器又被k8s自动运行起来
[root@n2 ~]# docker ps
CONTAINER ID   IMAGE                                                 COMMAND                  CREATED          STATUS          PORTS     NAMES
295b8bf7acc5   nginx                                                 "/docker-entrypoint.…"   41 seconds ago   Up 39 seconds             k8s_nginx_test_default_d5c1958a-6aa2-4451-9491-4a93fdcda8f6_0

3.2DaemonSet

在集群中所有几点上只部署一个(不支持弹性扩容)
每一个节点上部署一个Pod,删除节点自动删除对应的POD
特点:每一台机器上有且只有一个

# 在集群中所有的节点上部署只部署一个Pod

#编辑配置文件
[root@m01 ~]# vim zabbix-agent.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: zabbix-agent
spec:
  selector:
    matchLabels:
      app: zabbix-agent
  template:
    metadata:
      labels:
        app: zabbix-agent
    spec:
      containers:
        - name: zabbix-agent
          image: zabbix/zabbix-agent:5.2.6-centos
#部署
[root@m01 ~]# kubectl apply -f zabbix-agent.yaml

# 更新
1、修改配置文件
[root@k8s-m-01 ~]# kubectl edit daemonsets.apps zabbix-agent 
daemonset.apps/zabbix-agent edited

2、打标签的方式
[root@k8s-m-01 ~]# kubectl patch daemonsets.apps zabbix-agent  -p '{"spec":{"template":{"spec":{"containers":[{"image":"zabbix/zabbix-agent:centos-5.2.4", "name":"zabbix-agent"}]}}}}'
daemonset.apps/zabbix-agent patched

3、设置镜像
[root@k8s-m-01 ~]# kubectl set image daemonset/zabbix-agent zabbix-agent=zabbix/zabbix-agent:centos-5.2.3
daemonset.apps/zabbix-agent image updated

# 回滚
## 回滚到上一个版本
[root@k8s-m-01 ~]# kubectl rollout undo daemonset zabbix-agent 
daemonset.apps/zabbix-agent rolled back

## 回滚到指定版本
[root@k8s-m-01 ~]# kubectl rollout undo daemonset zabbix-agent --to-revision=1
daemonset.apps/zabbix-agent rolled back

StatudfluSet

部署有状态应用
特点:有启动顺序
对启动顺序无要求的应用就是无状态应用
对启动顺序有要求的就是有状态应用

以上是关于k8s的名称空间标签deployment控制器弹性伸缩的主要内容,如果未能解决你的问题,请参考以下文章

k8s各类yaml文件

跟k8s工作负载Deployments的缘起缘灭

K8S-[二]Deployment控制器

深入玩转K8S之业务弹性伸缩和滚动更新操作

k8s学习记录,RC/RS和Deployment

K8S yaml文件详解