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控制器弹性伸缩的主要内容,如果未能解决你的问题,请参考以下文章