k8s学习笔记——cicd前手动部署测试

为能搞明白使用jenkins、harbor、gitlab进行CICD部署的流程,我先进行了一下不使用其软件进行部署的过程,明白了这个过程,在配置上述自动化部署的工具时也就知道了大体回路。

以部署一个使用springboot做的helloword程序为例

1、将spingboot项目先用maven打包成jar文件

在项目目录下使用命令mvn clean package就可以在target目录下看到生成的helloworld.jar文件,

使用java -jar helloword.jar命令运行一下看能不能正常使用。没问题进行下一步

2、生成docker image文件

springboot用到了jdk环境镜像,首先使用docker本地拉取jdk镜像

sudo docker pull openjdk:8-alpine

编写Dockerfile文件

FROM openjdk:8-alpine

COPY target/helloworld.jar /springboot-web.jar

ENTRYPOINT ["java", "-jar", "/springboot-web.jar"]

打包生成镜像

sudo docker build -t springboot-web:v1 .

3、将镜像推到私有的harbor仓库

sudo docker tag springboot-web:v1 core.harbor.shell.com:32042/library/springboot-web:v1

sudo docker login -u admin core.harbor.shell.com:32042

//登录成功后

sudo docker push core.harbor.shell.com:32042/library/springboot-web:v1

查看harbor仓库里面library目录下要是有springboot-web镜像说明推送成功

4、编写k8s部署脚本deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-web
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: springboot-web
      release: canary
  template:
    metadata:
      labels:
        app: springboot-web
        release: canary
    spec:   
      containers:
      - name: springboot-web
        image: core.harbor.shell.com:32042/library/springboot-web:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 8084

---

apiVersion: v1
kind: Service
metadata:
  name: springboot-web
  namespace: default
spec:
  selector:
    app: springboot-web
    release: canary
  ports:
  - name: http
    targetPort: 8084
    port: 8084

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
  namespace: default
spec:
  ingressClassName: traefik
  rules:
  - host: springboot.shell.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: springboot-web
            port:
              name: http

然后部署kubectl apply -f deploy.yaml

这里需要注意如果直接就这么部署pod会拉不下镜像,显示no such host,这是因为k8s部署pod的节点主机没有配置harbor的host,需要在/etc/hosts里添加上core.harbor.shell.com的地址解析。

除此之外,在部署时还会报X509权限错误,没有拉取镜像的权限。

我看网上好多说需要配置imagePullSecrets和docker访问的secret,我尝试了一下并不管用,目前还不知道什么问题。我的解决办法:k8s部署pod是在分配的节点上使用docker拉取镜像,于是就在其节点上增加docker访问harbor的配置(CSDN),配置完就可以正常拉取了,我这里建议将所有worker节点都做一下相关配置

查看ingress里面设置的域名,将访问的客户端机器配置相关域名的解析,就可以正常访问springboot项目编写的服务了。

你可能感兴趣的:(网管笔记,云原生)