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对应的节点端口。

原文地址:https://www.cnblogs.com/huandada/p/9970801.html