k8s-應用部署


該demo主要作為一個dubbo項目通過maven自動化docker打包插件發布到鏡像倉庫樣例工程。該wiki后面同時會提供k8s部署zk,mysql,應用包的整個過程。該項目大體功能:zk作為注冊中心,服務端發布服務,消費端訂閱服務,在調用過程中訪問mysql數據庫。

環境准備:k8s集群,以及配置好kubectl客戶端工具.

項目源碼:https://github.com/HushAsy/demo

1.provider,consumer鏡像制作:

關於自動化鏡像發布,可以參考我的另一篇文章:https://www.cnblogs.com/HushAsy/p/9896196.html

此處貼出Dockerfile文件:

FROM registry.cn-hangzhou.aliyuncs.com/hush/basecontainer:20180929

#添加本地jar包
RUN mkdir -p /home/admin/app/
RUN mkdir -p /home/admin/tomcat/
ENV CATALINA_HOME /home/admin/tomcat/
#
ARG JAR_FILE

ADD target/${JAR_FILE} /home/admin/app/
#
#
#
# 將啟動命令寫入啟動腳本 start.sh
RUN echo "$JAVA_HOME/bin/java -jar $JAVA_OPTS -Ddubbo.address.ip=$POD_IP -Djava.security.egd=file:/dev/./urandom  /home/admin/app/${JAR_FILE} --spring.profiles.active=prod" > /home/admin/start.sh && chmod +x /home/admin/start.sh
WORKDIR $CATALINA_HOME
ENTRYPOINT ["/bin/bash", "/home/admin/start.sh"]

2.mysql-app.yaml

#mysql-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_mysql
          name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123456"
          ports:
            - containerPort: 3306
              name: mysql

#在客戶端提交yaml文件創建pod
kubectl create -f mysql-app.yaml
#創建成功后,執行下面命名可以看到當前pod執行情況
kubectl get pods

3.mysql service yaml配置

#mysql-srv.yaml
apiVersion: v1 kind: Service metadata: name: mysql spec: ports:
- port: 3306 selector: app: mysql

4.zk.yaml配置

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: zk-0
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: zk
        node: node0
    spec:
      hostname: zk-0
      volumes:
        - name: zk-data
          hostPath: 
            path: /data/zk-cluster/zk-data-0
        - name: zk-logs
          hostPath: 
            path: /data/zk-cluster/zk-logs-0
      containers:
      - name: zk-0
        image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_zk
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: zk-data
          readOnly: false
          mountPath: "/data/zk-data"
        - name: zk-logs
          readOnly: false
          mountPath: "/data/zk-logs"
        ports:
        - containerPort: 2181
        - containerPort: 2888
        - containerPort: 3888
        #command: ['tail', '-f', '/etc/hosts']  
        env:
        - name: ZOO_MY_ID
          value: '0'
        - name: ZOO_SERVERS
          # 注意!!k8s使用到virtual ip,因此,本機必須使用0.0.0.0 ip地址,否則本機zk啟動會異常:
          # ERROR [zk1/10.0.0.251:3888:QuorumCnxManager$Listener@547] - Exception while listening
          # java.net.BindException: Address not available (Bind failed)錯誤
          value: server.0=0.0.0.0:2888:3888 server.1=zk-1:2888:3888 server.2=zk-2:2888:3888
        - name: ZOO_DATA_DIR
          value: '/data/zk-data'
        - name: ZOO_DATA_LOG_DIR
          value: '/data/zk-logs'  

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: zk-1
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: zk
        node: node1
    spec:
      hostname: zk-1
      volumes:
        - name: zk-data
          hostPath: 
            path: /data/zk-cluster/zk-data-1
        - name: zk-logs
          hostPath: 
            path: /data/zk-cluster/zk-logs-1
      containers:
      - name: zk-1
        image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_zk
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: zk-data
          readOnly: false
          mountPath: "/data/zk-data"
        - name: zk-logs
          readOnly: false
          mountPath: "/data/zk-logs"
        ports:
        - containerPort: 2181
        - containerPort: 2888
        - containerPort: 3888
        #command: ['tail', '-f', '/etc/hosts']  
        env:
        - name: ZOO_MY_ID
          value: '1'
        - name: ZOO_SERVERS
          # 注意!!k8s使用到virtual ip,因此,本機必須使用0.0.0.0 ip地址,否則本機zk啟動會異常:
          # ERROR [zk1/10.0.0.251:3888:QuorumCnxManager$Listener@547] - Exception while listening
          # java.net.BindException: Address not available (Bind failed)錯誤
          value: server.0=zk-0:2888:3888 server.1=0.0.0.0:2888:3888 server.2=zk-2:2888:3888
        - name: ZOO_DATA_DIR
          value: '/data/zk-data'
        - name: ZOO_DATA_LOG_DIR
          value: '/data/zk-logs'  

---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: zk-2
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: zk
        node: node2
    spec:
      hostname: zk-2
      volumes:
        - name: zk-data
          hostPath: 
            path: /data/zk-cluster/zk-data-2
        - name: zk-logs
          hostPath: 
            path: /data/zk-cluster/zk-logs-2
      containers:
      - name: zk-2
        image: registry-vpc.cn-hangzhou.aliyuncs.com/hush/dubbo_zk
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: zk-data
          readOnly: false
          mountPath: "/data/zk-data"
        - name: zk-logs
          readOnly: false
          mountPath: "/data/zk-logs"
        ports:
        - containerPort: 2181
        - containerPort: 2888
        - containerPort: 3888
        #command: ['tail', '-f', '/etc/hosts']  
        env:
        - name: ZOO_MY_ID
          value: '2'
        - name: ZOO_SERVERS
          # 注意!!k8s使用到virtual ip,因此,本機必須使用0.0.0.0 ip地址,否則本機zk啟動會異常:
          # ERROR [zk1/10.0.0.251:3888:QuorumCnxManager$Listener@547] - Exception while listening
          # java.net.BindException: Address not available (Bind failed)錯誤
          value: server.0=zk-0:2888:3888 server.1=zk-1:2888:3888 server.2=0.0.0.0:2888:3888
        - name: ZOO_DATA_DIR
          value: '/data/zk-data'
        - name: ZOO_DATA_LOG_DIR
          value: '/data/zk-logs'

 

5.zk service yaml配置

---
kind: Service
apiVersion: v1
metadata:
  name: zk-0
  labels:
    app: zk
    node: node0
spec:
  type: LoadBalancer
  ports:
  - name: port-2181
    port: 2181
  - name: port-2888
    port: 2888
  - name: port-3888
    port: 3888
  selector:
    app: zk
    node: node0

---
kind: Service
apiVersion: v1
metadata:
  name: zk-1
  labels:
    app: zk
    node: node1
spec:
  type: LoadBalancer
  ports:
  - name: port-2181
    port: 2181
  - name: port-2888
    port: 2888
  - name: port-3888
    port: 3888
  selector:
    app: zk
    node: node1

---
kind: Service
apiVersion: v1
metadata:
  name: zk-2
  labels:
    app: zk
    node: node2
spec:
  type: LoadBalancer
  ports:
  - name: port-2181
    port: 2181
  - name: port-2888
    port: 2888
  - name: port-3888
    port: 3888
  selector:
    app: zk
    node: node2

 

6.部署provider yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: provider
  labels:
    app: provider
spec:
  replicas: 1
  selector:
    matchLabels:
      app: provider
  template:
    metadata:
      labels:
        app: provider
    spec:
      containers:
      - name: provider
        image: <鏡像地址>
        ports:
        - containerPort: 20880

 

7.consumer deployment yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: consumer
  labels:
    app: consumer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: consumer
  template:
    metadata:
      labels:
        app: consumer
    spec:
      containers:
      - name: consumer
        image: <鏡像地址>
        ports:
        - containerPort: 8080

8.consumer service yaml

kind: Service
apiVersion: v1
metadata:
  name: consumer_svc
spec:
  selector:
    app: consumer
  ports:
  - protocol: TCP
    port: 8080
   

9. 前端訪問控制 ingress 可以瞅瞅這位哥寫的博客:https://mritd.me/2017/03/04/how-to-use-nginx-ingress/

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: <host>
    http:
      paths:
      - path: /index
        backend:
          serviceName: consumer_svc
          servicePort: 8080
    

通過對應域名或ip訪問 完美


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM