zoukankan      html  css  js  c++  java
  • gitlab-ci + k8s 之k8s (二)

    k8s用自己话说,就是一种容器编排工具,部署好应用,再创建绑定应用的服务,就可以实现的服务访问了。这个理论还是得去看重点谈理论的文章,此处我们只记录本项目部署过程。

    背景介绍

    之前已实现gitlab-ci自动集成代码,部署到tomcat容器,并推送到阿里云镜像仓库。
    此项目使用阿里云的k8s容器服务部署应用。

    一系列准备工作,先参考阿里云文档

    快速创建Kubernetes集群
    https://help.aliyun.com/document_detail/85903.html?spm=a2c4g.11186623.6.555.534c4b4bY7F07R
    SSH访问Kubernetes集群
    https://help.aliyun.com/document_detail/86491.html?spm=5176.11065259.1996646101.searchclickresult.37524c20dma8gQ
    通过以上SSH访问Kubernetes集群的负载均衡地址登录到集群master,进行以下操作

    创建secret

    为了代码安全,我们将镜像仓库设为私有,私有仓库就需要对k8s的授权,在k8s master建secret

    kubectl create secret docker-registry test-secret --docker-server=registry-vpc.cn-shanghai.aliyuncs.com/testimage/test --docker-username=uraliyun_name --docker-password=repo_passwd --docker-email=mail@mail.com
    

    创建挂载卷

    由于我项目的特殊需求,在镜像里除了war包外还有一个外部配置文件,我需要将外部配置文件挂载到pod的指定目录下
    现将配置文件传到本服务器中,此处先将配置文件做成configmap,在文件所在路径下执行

    kubectl create configmap test.properties --from-file test.properties
    

    以yaml文件的形式创建deploy

    创建yaml文件

    vim test.yaml
    apiVersion: apps/v1beta2
    kind: Deployment
    metadata:
      name: test-backend-tomcat
      labels:
        app: testbackend
    spec:
      replicas: 1     #副本集,定义pod数
      selector:
        matchLabels:
          app: testbackend
      template:
        metadata:
          labels:       #标签,pod svc等资源是以标签关联,所以不同应用要打上不同标签
            app: testbackend
        spec:
          imagePullSecrets:                                            #创建的secret
          - name: test-backend-secret
          containers:
          - name: test-backend-tomcat
            image: registry-vpc.cn-shanghai.aliyuncs.com/testimage/test-backend:1  #镜像
            resources:                                       #资源限制,最大值与请求值
              limits:
                cpu: "0.5"
                memory: 100Mi
              requests:
                cpu: "0.2"
                memory: 50Mi
            ports:
            - containerPort: 8080                                  
            volumeMounts:                                              #挂载卷
            - name: test-backend-volume
              mountPath: /rogueone/testconfig/
            - name: test-backend-log-volume   #将worker节点上/logs/test-backend做成一个名为test-backend-log-volume的存储卷,再将该存储卷挂载在pod的容器里的/logs下
              mountPath: /logs 
          volumes:
          - name: test-backend-volume
            configMap:
             name: test.properties
          - name: test-backend-log-volume        
            hostPath:                                     #卷的类型是hostpath,即worker节点目录挂载到容器类型的卷
              path: /logs/test-backend
              type: Directory
    

    以yaml文件生成相关资源,并查看

    kubectl create -f appstore.yaml
    kubectl get deployment|grep  test-backend-tomcat
    

    创建关联以上deploy的nodeport 类型的svc

    创建yaml文件

    vim test_svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
    spec:
      type: NodePort
      ports:
      - port: 30080                   #服务端口,供集群内部访问使用
        targetPort: 8080           # 容器端口,容器中提供服务的端口
        nodePort: 30001           #节点端口,在节点上对外开放的端口
     selector:
       app: testbackend         #此处标签要与deploy中matchlabel一致
    

    根据以上yaml文件创建对应的服务,并查看

    kubectl create -f  test_svc.yaml
    kubectl get svc |grep nginx-service
    

    此时在k8s的master与worker上都开放了对应的节点端口可以访问到容器服务

    通过阿里云负载均衡访问到k8s

    创建一个负载均衡,通过不同端口区别不同服务,同一个端口负载到k8s三台master对应的节点端口。

  • 相关阅读:
    Java接口
    【精】搭建redis cluster集群,JedisCluster带密码访问【解决当中各种坑】!
    java操作redis集群配置[可配置密码]和工具类(比较好用)
    关于Jedis是否线程安全的测试
    RedisDesktopManager如何使用命令行?
    多线程按行读取文件【我】
    根据开始字符串和结束字符串截取文件生成另一个文件(日志处理)【我】
    Redis操作List工具类封装,Java Redis List命令封装
    缓存数据库-redis数据类型和操作(list)
    Redis需要多少内存预留-内存占用多少才安全
  • 原文地址:https://www.cnblogs.com/huandada/p/9970801.html
Copyright © 2011-2022 走看看