kubernetes入門之--StatefulSet

在開始寫之前我們先來簡單瞭解一下kubernetes的 StatefulSets,大致概括爲,有狀態的集合,管理所有有狀態的服務,以下是官網上StatefulSets的幾個特性
1.穩定,獨特的網絡標識符。
2.穩定,持久的存儲。
3.有序,優雅的部署和擴展。
4.有序的自動滾動更新。

常見的資源

  • pod
  • RelicationController
  • StatefulSets
    • 特點
      • 可擴容
      • 有序
      • pod 索引唯一
      • 有狀態
    • 使用場景
      • 對唯一性,有序性要求較高的pod
      • 集羣容器啓動時示例必須相互感知
  • ConfigMap
    接下來我們通過啓動服務器來演示StatefulSet

application.yaml


我們在idea的Eureka-server服務中創建application.yaml,我們的目的是讓A註冊進B,B也註冊進A,那麼我們需要創建兩個yaml
貼出示例yaml

spring:
  application:
    name: eureka-server
server:
  port: 8761 #eureka默認端口號8761
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://server2:8760/eureka
    instance:
      hostname: server1
  server:
    enable-self-preservation: false

appllication-node.yaml

接下來我們接着貼出第二個yaml

spring:
  application:
    name: eureka-server
server:
  port: 8760 #eureka默認端口號8760
eureka:
  client:
#    register-with-eureka: false
#    fetch-registry: false
    service-url:
      defaultZone: http://server3:8762/eureka
    instance:
      hostname: server2
  server:
    enable-self-preservation: false

好然後直接啓動eureka服務,這個時候我們需要注意的是在Edit Configurations上勾選如圖,便於我們二次啓動
在這裏插入圖片描述
這裏寫出yaml前綴node
最後在我們兩次都啓動過eureka服務之後,我們在網頁上直接訪問applocation.yaml的端口號localhost:8761
在這裏插入圖片描述
然後同樣的訪問:8760的端口號這樣我們就會發現,第一個yaml註冊到第二個yaml裏面,…
ok 接下來我們在eureka-server的目錄下創建eureka.yaml文件,並且配置容器

apiVersion: v1
kind: Service
metadata:
  name: eureka-service
  labels:
    app: eureka-server
spec:
  selector:
    app: eureka-server
  type: NodePort
  ports:
    - port: 8761
      nodePort: 30001
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: eureka-server
  labels:
    app: eureka-server
spec:
  replicas: 2
  selector:
   matchLabels:
     app: eureka-server
  serviceName: eureka-service
  template:
    metadata:
      labels:
        app: eureka-server
    spec:
      volumes:
        - name: jar-location
          hostPath:
            path: /root/apps/eureka-server-0.0.1-SNAPSHOT.jar
      containers:
        - name: eureka-container
          image: java
          imagePullPolicy: IfNotPresent
          workingDir: /apps
          env:
            - name: NODE
              value: "eureka-server-0.eureka-service.default.svc.cluster.local"
            - name: NODE1
              value: "eureka-server-1.eureka-service.default.svc.cluster.local"
#          resources:
#            requests:
#              memory: "256m"
#            limits:
#              memory: "256m"
          volumeMounts:
            - mountPath: /apps/eureka-server-0.0.1-SNAPSHOT.jar
              name: jar-location
          command:
            - "java"
            - "-jar"
            - "eureka-server-0.0.1-SNAPSHOT.jar"

然後我們更改application.yaml的配置


spring:
  application:
    name: eureka-server
server:
  port: 8761 #eureka默認端口號8761
eureka:
  client:
#register-with-eureka: false
    ##    fetch-registry: false
    service-url:
      defaultZone: http://${NODE:locahost}:8761/eureka,http://${NODE1:locahost}:8761/eureka
    instance:
#      hostname: ${NODE1_HOST_NAME: server1}
  server:
    enable-self-preservation: false

接下來就是打開Gradle的Tasks的build 進行打包項目爲jar,然後把jar包上傳到finalshell的服務器上進行部署,並且創建Eureka.yaml文件

apiVersion: v1
kind: Service
metadata:
  name: eureka-service
  labels:
    app: eureka-server
spec:
  selector:
    app: eureka-server
  type: NodePort
  ports:
    - port: 8761
      nodePort: 30001
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: eureka-server
  labels:
    app: eureka-server
spec:
  replicas: 2
  selector:
   matchLabels:
     app: eureka-server
  serviceName: eureka-service
  template:
    metadata:
      labels:
        app: eureka-server
    spec:
      volumes:
        - name: jar-location
          hostPath:
            path: /root/apps/eureka-server-0.0.1-SNAPSHOT.jar
      containers:
        - name: eureka-container
          image: java
          imagePullPolicy: IfNotPresent
          workingDir: /apps
          env:
            - name: NODE
              value: "eureka-server-0.eureka-service.default.svc.cluster.local"
            - name: NODE1
              value: "eureka-server-1.eureka-service.default.svc.cluster.local"

#          resources:
#            requests:
#              memory: "256m"
#            limits:
#              memory: "256m"
          volumeMounts:
            - mountPath: /apps/eureka-server-0.0.1-SNAPSHOT.jar
              name: jar-location
          command:
            - "java"
            - "-jar"
            - "eureka-server-0.0.1-SNAPSHOT.jar"

接下來我們就在finalshell上傳項目的jar包以及yaml文件到服務器
1.kubectl detele -f eureka.yaml
在這裏插入圖片描述

2. kubectl create -f eureka.yaml

在這裏插入圖片描述
3 kubectl get svc
在這裏插入圖片描述
然後docker-demo-service已經佔用我們的30001的端口了,
刪除
在這裏插入圖片描述
重新get svc就能看到name變成了eureka-service的名字
在這裏插入圖片描述
ok 這個時候已經差不多就剩啓動容器了

4.查看狀態

kubectl  get pod

在這裏插入圖片描述
這個時候name已經是有序狀態了

5.啓動容器

kubectl logs  eureka-server-0

在這裏插入圖片描述
6訪問路徑

curl http://localhost:30001

在這裏插入圖片描述
好了 這個時候容器已經啓動完畢,訪問也完畢,大功告成!
接下來的kuberbetes的教程請繼續關注!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章