0
点赞
收藏
分享

微信扫一扫

linux12k8s -->09StatefluSet控制器


文章目录

  • ​​一、StatefluSet控制器​​
  • ​​1.介绍​​
  • ​​2.特点​​
  • ​​1.使用StatefluSet部署nginx测试启动顺序​​
  • ​​2.使用StatefluSet部署word press​​

一、StatefluSet控制器

1.介绍

Kubernetes中有很多的控制器,比如常用的ReplicaSet,Deployment,DaemonSet,StatefulSet等。以这四种为例,我们可以将它们分为两种,一种为有状态控制器,一种为无状态控制器,StatefulSet则为有状态控制器。

2.特点

# StatefluSet最主要的是用来部署有状态应用

# StatefulSet部署是有状态应用,拥有统一的网络,并且有启动顺序

查询规范:kubectl explain stetafulset.spec

StatefulSet拥有统一的网络,并且有启动顺序

通常用于管理b和部署有状态的服务,如:MySQL,Redis,MongoDB等;也就是说,如果我们的应用如有以下的任何一个特点,就可以使用statefulset控制器来部署

  • 有状态控制器通常有以下几个特点:

# 1、稳定、唯一的网络标识

唯一且不会发生变化,由 $(statefulset name)-(0-N)组成,N为一个无限大的正整数,从0开始
# 2、稳定、持久的存储

每个Pod都对应一个PVC,PVC的名称组成:( v o l u m e C l a i m T e m p l a t e s n a m e ) − (volumeClaimTemplates name)-(volumeClaimTemplatesname)−(pod name)-(0-N),N为一个无限大的正整数,从0开始
# 3、有序、优雅的部署和伸缩

严格按照从0到N的顺序创建,并且下一个Pod创建的前提是上一个Pod已经Running状态

每扩容一个pod前提是上一个Pod已经Running状态

每缩容一个pod前提是上一个Pod已经完全Delete

# 4、有序、优雅的删除和停止

严格按照从N到0的顺序删除,并且下一个Pod删除的前提是上一个Pod已经完全Delete
# 5、有序、自动的滚动更新

严格按照从N到1的顺序升级,并且下一个Pod升级的前提是上一个Pod已经Running状态
3.使用statefulset部署WordPress

1.使用StatefluSet部署nginx测试启动顺序

[root@k8s-m-01 ~]# kubectl explain StatefulSet   #查看测试
#1.创建存放目录
[root@k8s-m-01 ~]# mkdir statefluset
[root@k8s-m-01 ~]# cd statefluset/

#2.创建配置清单
[root@k8s-m-01 statefluset]# vim test.yaml
apiVersion: v1
kind: Service
metadata:
name: statefulset-test
spec:
ports:
- name: http
port: 80
targetPort: 80
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefulset-test
spec: # StatefulSet控制器的spec里必须包含三个(serviceName、template、selector)
serviceName: statefulset-test
template: #模板
metadata: #元数据
labels: #标签
app: statefulset
spec:
containers:
- name: nginx
image: nginx
selector: #选择
matchExpressions: #模糊选择
- key: app #关键字app
operator: In #操作符 in是包含的意思
values:
- statefulset #指app标签中包含statefulset就可以(如果values这里包含多个值,它们之间是或的关系)
# - aaa
# - xxx

#3.部署
[root@k8s-m-01 statefluset]# kubectl apply -f test.yaml
service/statefulset-test unchanged
statefulset.apps/statefulset-test created

#4.测试扩容启动顺序
[root@k8s-m-01 statefluset]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
statefulset-test ClusterIP 10.111.107.0 <none> 80/TCP 22m

[root@k8s-m-01 statefluset]# kubectl edit statefulsets.apps #编辑扩容到3个
statefulset.apps/statefulset-test edited
spec:
podManagementPolicy: OrderedReady
replicas: 1 #修改这个
revisionHistoryLimit: 10
selector:

[root@k8s-m-01 statefluset]# kubectl get pods -o wide -w #监控可观察到是先创建statefulset-test-0,等statefulset-test-0 状态为running后再创建statefulset-test-1,以此类推....
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED
statefulset-test-0 1/1 Running 0 108s
statefulset-test-1 1/1 Running 0 31s
statefulset-test-2 0/1 ContainerCreating 0 8s

#5.测试缩容启动顺序
[root@k8s-m-01 statefluset]# kubectl edit statefulset #编辑缩容到1个
statefulset.apps/statefulset-test edited

[root@k8s-m-01 statefluset]# kubectl get pods -o wide -w #监控可得是先结束掉statefulset-test-4,等statefulset-test-4状态为 Terminating后,再结束掉statefulset-test-3,以此类推....
NAME READY STATUS RESTARTS AGE
deployment-5b89599fc6-v7xpv 1/1 Running 3 36h
statefulset-test-0 1/1 Running 0 3m1s
test-tag 1/1 Running 5 2d23h
test1 1/1 Running 5 2d19h

[root@k8s-m-01 statefluset]# kubectl get pods -o wide #查看所容后pod个数
NAME READY STATUS RESTARTS AGE
statefulset-test-0 1/1 Running 0 3m1s

2.使用StatefluSet部署word press

#1.创建配置清单
[root@k8s-m-01 wordpress]# vim wordpress.yaml
apiVersion: v1
kind: Service
metadata:
name: wordpress-test
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: wordpress-test
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: wordpress-test
spec:
serviceName: wordpress-test
selector:
matchLabels:
app: wordpress-test
template:
metadata:
labels:
app: wordpress-test
spec:
containers:
- name: php
image: elaina0808/lnmp-php:v6
- name: nginx
image: elaina0808/lnmp-nginx:v9

#2.部署word press
[root@k8s-m-01 wordpress]# kubectl apply -f wordpress.yaml

#3.查看集群内部IP
[root@k8s-m-01 wordpress]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress-test ClusterIP 10.96.102.98 <none> 80/TCP 15m

#4.内网访问
[root@k8s-m-01 wordpress]# curl 10.96.102.98
<!DOCTYPE html>
<html dir='ltr'>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width">
<title>WordPress › Error</title>
<style type="text/css">
html {
background: #f1f1f1;
}


#5.修改成nodeport生成外网IP
[root@k8s-m-01 wordpress]# kubectl edit svc wordpress-test
service/wordpress-test edited
【type:NodePort】#把原来的clusterIP改成nodeport

#6.查看分配的IP
[root@k8s-m-01 wordpress]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress-test NodePort 10.96.102.98 <none> 80:31895/TCP 18m

#7.浏览器访问
192.168.12.11:31895

linux12k8s -->09StatefluSet控制器_nginx


举报

相关推荐

0 条评论