K8s使用Job完成初始化sql脚本,和初始化网关注册

kubernetes简介

Kubernetes(简称k8s)是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了资源调度、部署管理、服务发现、扩容缩容、监控,维护等一整套功能。,努力成为跨主机集群的自动部署、扩展以及运行应用程序容器的平台。 它支持一系列容器工具, 包括Docker等。

基本概念

在这里插入图片描述

  • 节点( Node ):一个节点是一个运行 Kubernetes 中的主机。
  • 容器组( Pod ):一个 Pod 对应于由若干容器组成的一个容器组,同个组内的容器共享一个存储卷(volume)。
  • 容器组生命周期( pos-states ):包含所有容器状态集合,包括容器组状态类型,容器组生命周期,事件,重启策略,以及 replication controllers。
  • Replication Controllers:主要负责指定数量的 pod 在同一时间一起运行。
  • 服务( services ):一个 Kubernetes 服务是容器组逻辑的高级抽象,同时也对外提供访问容器组的策略。
  • 卷( volumes ):一个卷就是一个目录,容器对其有访问权限。
  • 标签( labels ):标签是用来连接一组对象的,比如容器组。标签可以被用来组织和选择子对象。
  • 接口权限( accessing_the_api ):端口,IP 地址和代理的防火墙规则。
  • web 界面( ux ):用户可以通过 web 界面操作 Kubernetes。
  • 命令行操作( cli ): kubecfg 命令

我们先把k8s跑起来在说,部署参考:https://www.cnblogs.com/python-cat/p/10831419.html

这里就不介绍k8s的各个组件了,详情可查看https://blog.csdn.net/weixin_43538419/article/details/88784069

本人是使用configmap的方式将初始化数据挂载到job里,如果初始化数据过多的话,建议自己搞一个容器,然后将脚本直接放入容器中,通过环境变量指定执行哪些脚本,本人还写了configmap导入环境变量实现,如果有好的介意,可以私信我

初始化sql通过configmap的env环境变量添加到pod中使用

#configmap:sql-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-initdb-sql-config
  namespace: default
data:
  initdb.sql: |
    CREATE DATABASE if not exists  `database_audit` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
    USE `database_audit`;
    
    DROP TABLE IF EXISTS `t_alert`;
    
    CREATE TABLE `t_alert` (
    `id` int(11) NOT NULL,
    `address` varchar(20) NOT NULL,
    `db_type` varchar(45) NOT NULL,
    `log_type` varchar(45) NOT NULL,
    `message` text,
    `create_date` datetime NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    DROP TABLE IF EXISTS `t_dic`;
    
    CREATE TABLE `t_dic` (
    `id` int(11) NOT NULL,
    `type` varchar(45) NOT NULL,
    `value` varchar(45) NOT NULL,
    `code` char(6) NOT NULL,
    `description` text,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
#Jod:init-sql.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: mysql-init
spec:
 template:
  metadata:
    name: myjob
  spec:
   containers:
   - name: init-sql
     image: monasca/mysql-init
     imagePullPolicy: IfNotPresent
     volumeMounts:
      - name: mysql-initdb
        mountPath: app/config
     command: ["sh","-c","mysql -u root -pxxx -P3306 -h 10.121.118.24 < app/config/init.sql"]
   volumes:
   - name: mysql-initdb
     configMap:
       name: mysql-initdb-sql-config
       items:
       - key: initdb.sql
         path: init.sql
   restartPolicy: OnFailure

接下来就是启动和查看Pod启动的情况

kubectl apply -f sql-config.yaml            #启动configmap配置
kubectl apply -f init-sql.yaml              #启动Pod
kubectl get po                              #查看启动的所有pod
kubectl describe pod xxx                    #查看这个pod启动的详情,xxx是pod的name
kubectl logs -f --tail 500 xxx              #查看容器的报错日志
kubectl delete -f init-sql.yaml/kubectl delete pod xxx/kubectl delete pod --all #删除pod3种方式

其他命令请查看:https://www.jianshu.com/p/07455dbfd6bb

#初始化网关服务通过env环境变量引用configmap数据

#configmap:gateway-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: gateway-server-config
  namespace: default
data:
  gateway-server-v1: |
    curl -X GET -H 'X-Auth-Token:eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlcyI6W3siaWQiOiJkOTllMWYwN2M3ZmI0NmY4OGMwYjg2ZTFkZTlhZjM1YyIsIm5hbWUiOiJhZG1pbiJ9LHsiaWQiOiJjMmU3YmY4YWI1MGE0MzdlOWVjZTkwMDQ4MjE2YTYzOCIsIm5hbWUiOiJtZW1iZXIifSx7ImlkIjoiMzUxYjE0MTg3NGY5NGRiMWFjZGVlM2QxMWEwOTM4MjkiLCJuYW1lIjoicmVhZGVyIn0seyJpZCI6ImM0ZTliZTk5NmEzYTQ0Y2JhYjRkMmYwYjAwODgxMzE0IiwibmFtZSI6ImNsb3VkX2FkbWluIn1dLCJzdWIiOiJjOTQ0YzM3NDVkZjk0ZTI3YWY2ZDlhYjAwNTBiYTFmOCIsInByb2plY3QiOnsiaWQiOm51bGx9LCJvcGVuc3RhY2tfc2l0ZV9pZCI6IjNiOTliYzgzNjBiNTQ3MmM4OTI5MTc1ZGRjZTlmNTg0IiwiZXhwIjoxNjM1Mzk5MTExLCJvcGVuc3RhY2tfYXVkaXRfaWRzIjpbInNJa05teEFNVFR5TjhqN2VoaWx6anciXSwiaWF0IjoxNjM1Mzk1NTEyLCJvcGVuc3RhY2tfbWV0aG9kcyI6WyJwYXNzd29yZCJdLCJ1c2VyIjp7InBhc3N3b3JkX2V4cGlyZXNfYXQiOm51bGwsImRvbWFpbl9pZCI6ImRlZmF1bHQiLCJuYW1lIjoiYWRtaW4iLCJpZCI6ImM5NDRjMzc0NWRmOTRlMjdhZjZkOWFiMDA1MGJhMWY4In19.eE-S9JryTuK-M3ILR6-QtzcO__bTIJDaKjUCfAuFVG7b1_67pTXkDa5qwhAnpARV2dHq4bS0G_R7Yj5zII4bRQ' -i http://10.121.118.28:5000/v3/users
#Jod:init-gateway-volume.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: myapp-job-server-env
spec:
 template:
  spec:
   containers:
   - name: init-gateway-server
     image: curlimages/curl
     imagePullPolicy: IfNotPresent
     command: ["sh","-c","echo $KEY3|sh;echo $KEY4|sh;sleep 36000"]
     env:
       - name: KEY3
         valueFrom:
           configMapKeyRef:
             name: gateway-server-config
             key: gateway-server-v3
       - name: KEY4
         valueFrom:
           configMapKeyRef:
             name: gateway-server-config
             key: gateway-server-v4
   restartPolicy: OnFailure

命令的话和上面相同的

初始化sql通过configmap挂载pod中

#Job:init-gateway-volume.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: myapp-job-server-volume
spec:
 template:
  spec:
   containers:
   - name: init-gateway-server
     image: curlimages/curl
     imagePullPolicy: IfNotPresent
     command: ["sh","-c","sh app/config/init-gateway-v1.sh;sleep 36000"]
     volumeMounts:
       - name: init-gateway
         mountPath: app/config
   volumes:
   - name: init-gateway
     configMap:
       name: gateway-server-config
       items:
       - key: gateway-server-v1
         path: init-gateway-v1.sh
   restartPolicy: OnFailure

因为网络注册服务需要获取token登录,所以笔者需要处理一些逻辑,所以使用curl命令无法处理,后期笔者会自己做一个容器,然后将逻辑处理用python实现。

猜你喜欢

转载自blog.csdn.net/weixin_49319422/article/details/121037460
今日推荐