在開始寫之前我們先來簡單瞭解一下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上勾選如圖,便於我們二次啓動
最後在我們兩次都啓動過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的教程請繼續關注!!!