案例-Kubernetes运行Zookeeper集群并基于PVC实现数据持久化

192 阅读4分钟

image.png

业务容器化优势

① 提高资源利用率、节省IT成本支出。

② 提高部署效率(降低人工成本支出),实现基于kubernetes实现微服务的快速部署与交付、容器的批量调度与秒级启动。

③ 实现横向扩容、灰度部署、回滚、链路追踪、服务治理等。

④ 可根据业务负载进行自动弹性伸缩。

⑤ 容器将环境和代码打包在镜像内,保证了测试与生产运行环境的一致性。

⑥ 紧跟云原生社区技术发展的步伐,不给公司遗留技术债,为后期技术升级夯实了基础。

⑦ 为个人储备前沿技术,提高个人level

业务容器化案例一

业务规划

image.png

流程介绍 1 开发代码 2 推送到gitlab 3 kenkins 构建包 4 构建镜像 5 推送到harbor 6 k8s 灰度升级 滚动升级

业务镜像分层

image.png

每个业务镜像 都是基于官方的基础镜像 二次修改的

层级构建

  • 官方基础镜像

  • 公司基础镜像

    • telnet
    • ssh
    • 运维需要的东西
    • 或者是安全加固的东西
  • 业务基础镜像

    • 根据不同的开发栈 加入SDK
    • python java go nginx
  • 业务镜像

    • 打入不同业务的程序 应用 代码
    • nginx 打入配置文件

镜像分层的好处

前面3部都是相对固定的 每次只需要更新代码到容器中 衍生出不同版本的业务镜像

操作案例-Kubernetes运行Zookeeper集群并基于PVC实现数据持久化

image.png

操作步骤

构建镜像

step1 创建两个仓库

harbor.linuxarchitect.io/harbor/proj…

pub-images(公共镜像) 和 magedu 业务镜像

打基础镜像

docker pull elevy/slim_java:8 

docker tag elevy/slim_java:8 harbor.linuxarchitect.io/baseimages/slim_java:8

docker push harbor.linuxarchitect.io/baseimages/slim_java:8 

配置镜像加速 cr.console.aliyun.com/cn-hangzhou…

vim /etc/docker/daemon.json 

{ "registry-mirrors": ["https://$random_id.mirror.aliyuncs.com"] }

构建业务镜像

cd /opt/01-jiege/k8s-data/dockerfile/web/magedu/zookeeper;

docker build -t harbor.linuxarchitect.io/magedu/zookeeper:v3.4.14 .
     
docker push  harbor.linuxarchitect.io/magedu/zookeeper:v3.4.14

测试镜像运行

docker run -ti --rm harbor.linuxarchitect.io/magedu/zookeeper:v3.4.14

image.png

step2 创建动态类

juejin.cn/post/729444…

参考这个文档 创建一个storageclass

step3 部署zk

zookeeper.yaml

apiVersion: v1
kind: Service
metadata:
  name: zookeeper
  namespace: magedu
spec:
  ports:
    - name: client
      port: 2181
  selector:
    app: zookeeper
---
apiVersion: v1
kind: Service
metadata:
  name: zookeeper1
  namespace: magedu
spec:
  type: NodePort        
  ports:
    - name: client
      port: 2181
      nodePort: 32181
    - name: followers
      port: 2888
    - name: election
      port: 3888
  selector:
    app: zookeeper
    server-id: "1"
---
apiVersion: v1
kind: Service
metadata:
  name: zookeeper2
  namespace: magedu
spec:
  type: NodePort        
  ports:
    - name: client
      port: 2181
      nodePort: 32182
    - name: followers
      port: 2888
    - name: election
      port: 3888
  selector:
    app: zookeeper
    server-id: "2"
---
apiVersion: v1
kind: Service
metadata:
  name: zookeeper3
  namespace: magedu
spec:
  type: NodePort        
  ports:
    - name: client
      port: 2181
      nodePort: 32183
    - name: followers
      port: 2888
    - name: election
      port: 3888
  selector:
    app: zookeeper
    server-id: "3"


---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs-dynamic-zk-1
  namespace: magedu
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-csi

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs-dynamic-zk-2
  namespace: magedu
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-csi

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-nfs-dynamic-zk-3
  namespace: magedu
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-csi
---
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  name: zookeeper1
  namespace: magedu
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
        server-id: "1"
    spec:
      volumes:
        - name: data
          emptyDir: {}
        - name: wal
          emptyDir:
            medium: Memory
      containers:
        - name: server
          image: harbor.linuxarchitect.io/magedu/zookeeper:v3.4.14 
          imagePullPolicy: Always
          env:
            - name: MYID
              value: "1"
            - name: SERVERS
              value: "zookeeper1,zookeeper2,zookeeper3"
            - name: JVMFLAGS
              value: "-Xmx2G"
          ports:
            - containerPort: 2181
            - containerPort: 2888
            - containerPort: 3888
          volumeMounts:
          - mountPath: "/zookeeper/data"
            name: zookeeper-datadir-pvc-1 
      volumes:
        - name: zookeeper-datadir-pvc-1 
          persistentVolumeClaim:
#            claimName: zookeeper-datadir-pvc-1
            claimName: pvc-nfs-dynamic-zk-1
---
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  name: zookeeper2
  namespace: magedu
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
        server-id: "2"
    spec:
      volumes:
        - name: data
          emptyDir: {}
        - name: wal
          emptyDir:
            medium: Memory
      containers:
        - name: server
          image: harbor.linuxarchitect.io/magedu/zookeeper:v3.4.14 
          imagePullPolicy: Always
          env:
            - name: MYID
              value: "2"
            - name: SERVERS
              value: "zookeeper1,zookeeper2,zookeeper3"
            - name: JVMFLAGS
              value: "-Xmx2G"
          ports:
            - containerPort: 2181
            - containerPort: 2888
            - containerPort: 3888
          volumeMounts:
          - mountPath: "/zookeeper/data"
            name: zookeeper-datadir-pvc-2 
      volumes:
        - name: zookeeper-datadir-pvc-2
          persistentVolumeClaim:
#            claimName: zookeeper-datadir-pvc-2
            claimName: pvc-nfs-dynamic-zk-2
---
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  name: zookeeper3
  namespace: magedu
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
        server-id: "3"
    spec:
      volumes:
        - name: data
          emptyDir: {}
        - name: wal
          emptyDir:
            medium: Memory
      containers:
        - name: server
          image: harbor.linuxarchitect.io/magedu/zookeeper:v3.4.14 
          imagePullPolicy: Always
          env:
            - name: MYID
              value: "3"
            - name: SERVERS
              value: "zookeeper1,zookeeper2,zookeeper3"
            - name: JVMFLAGS
              value: "-Xmx2G"
          ports:
            - containerPort: 2181
            - containerPort: 2888
            - containerPort: 3888
          volumeMounts:
          - mountPath: "/zookeeper/data"
            name: zookeeper-datadir-pvc-3
      volumes:
        - name: zookeeper-datadir-pvc-3
          persistentVolumeClaim:
#           claimName: zookeeper-datadir-pvc-3
           claimName: pvc-nfs-dynamic-zk-3

image.png

验证zk集群状态