zoukankan      html  css  js  c++  java
  • jenkins+k8s部署

    1. jenkins配置部署,从git或者svn等拉取代码,编制打包,在博客的jenkins那块有具体的讲解
    
    2. 将打好的包war/java包拷贝到k8s-Master,或者在jenkins上也行,我这里测试为了方便直接在k8s上面执行
    
    3. 在k8s-node和k8s-master上配置好私有仓库镜像拉取
        vim /usr/lib/systemd/system/docker.service
        #ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
        ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.105
        systemctl daemon-reload && systemctl restart docker
    
    4. 在k8s-master编写Dockerfile,jenkins执行的脚本及yaml文件
        mkdir /root/tomcat
        vim Dockerfile
        FROM tomcat       #基础镜像
    
        MAINTAINER Mlxg    #作者
    
        RUN mkdir /usr/local/tomcat/webapps/test    #创建容器test目录
    
        ADD test.txt /usr/local/tomcat/webapps/test  #test.txt放到test目录
       #jar/war包直接ADD到webapps下启动tomcat即可 ADD server.xml /usr/local/tomcat/conf #替换容器server.xml EXPOSE 18080 #容器tomcat端口 ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"] #启动tomcat jenkins脚本 #!/bin/bash docker build -t tomcat:v1.0 . #生成镜像 docker tag tomcat:v1.0 192.168.0.105/test/tomcat:v1.0 #打tag docker login --username=admin --password='admin' 192.168.0.105 #登录私有仓库 docker push 192.168.0.105/test/tomcat:v1.0 #上传镜像
    5. 配置无需手动登录docker私有仓库
        docker login 192.168.0.105输入用户及密码
        登录之后在~/.docker/config.json文件
        再对上面的config.json进行base64加密,命令如下:
        cat ~/.docker/config.json |base64 -w 0
        创建secret.yaml文件,文件内容如下:
    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    data:
      .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJodWIueXh0Yy5jb206ODA4MSI6IHsKCQkJImF1dGgiOiAiWTNJM09saDFNVEl6TkRVMk1qVT0iCgkJfQoJfQp9Cg==   #base64加密密码
    type: kubernetes.io/dockerconfigjson
    
        创建secret,命令如下:
        kubectl create -f secret.yaml,生成secret
        我试了一下无法拉取,还没未找到问题,可能是我之前搞错了之后,生成了一个错误的
        手动创建一个secret,使用 secret 来指定 pull 权限
        kubectl create secret docker-registry registry-harbor 
    --namespace=default --docker-server=192.168.0.105 
    --docker-username=admin --docker-password='admin'
        kubectl get secrets
    
    6. 编写yaml文件及svc文件
    test-rc.yaml
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: test
    spec:
      replicas: 2
      selector:
        app: test
      template:
        metadata:
          labels:
            app: test
        spec:
          containers:
          - name: test
            image: 192.168.0.105/test/tomcat:v1.0  #私有仓库镜像
            ports:
            - containerPort: 18080   
          imagePullSecrets:
          - name: registry-harbor    #创建secret定义的仓库名称
    
    test-svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: test
    spec:
      type: NodePort
      ports:
        - port: 18080  #容器暴露端口
          nodePort: 31002  #映射node服务器提供外部访问端口
      selector:
        app: test
    
    8.  执行部署web及services
        kubectl create -f test-rc.yaml
        kubectl get pods   #可查看pod进度
        kubectl describe pod test-s5c48  #查看pod信息及报错
        kubectl delete -f test-rc.yaml   #删除pods
    
        kubectl create -f test-svc.yaml
        kubectl get svc
        kubectl delete -f test-svc.yaml
       docker ps | grep tomcat #在node上查看容器是否正常运行

      

    9. jenkins配置
        配置源码及执行的shell
    

    10. k8s上编写Docfile,build,yanl文件
        在jenkins上ADD zip/jar包是报错没有这个文件,暂未找到什么问题
        此处scp到k8s-master上执行打包镜像上传私有仓库
    vim Dockerfile
    FROM docker.io/centos
    
    MAINTAINER Mlxg
    
    RUN yum install -y unzip
    
    RUN mkdir /opt/server
    
    ADD letouactivity-provider-1.0.0-SNAPSHOT-bin.zip /opt/server
    
    RUN unzip /opt/server/letouactivity-provider-1.0.0-SNAPSHOT-bin.zip -d /opt/server
    
    EXPOSE 28080
    
    ENTRYPOINT    ["/opt/server/bin/start.sh","run"]
    
    
    vim letou.sh   #tag可通过变量获取,为了测试方便
    #!/bin/bash
    docker build -t letou:v1.0 .
    docker tag letou:v1.0 192.168.0.105/test/letou:v1.0
    docker login --username=Mlxg --password='Mlxg2234'  192.168.0.105
    docker push 192.168.0.105/test/letou:v1.0
    
    vim letou-rc.yaml
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: letou
    spec:
      replicas: 2
      selector:
        app: letou
      template:
        metadata:
          labels:
            app: letou
        spec:
          containers:
          - name: letou
            image: 192.168.0.105/test/letou:v1.0
            ports:
            - containerPort: 28080
          imagePullSecrets:
          - name: registry-harbor
    
    
    vim letou-svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: letou
    spec:
      type: NodePort
      ports:
        - port: 28080
          nodePort: 30332
      selector:
        app: letou
    

    11. 在k8s-master执行查看是否部署成功
        因为我们的代码需要连接duboo,zk,apollo(可部署在宿主机),此时node上的容器其实访问不了
        只要能成功查看letou pod就发布成功了
    

      

  • 相关阅读:
    前端的推荐资源
    Python 学习日志(一)
    遇到的一些elasticsearch报错信息整理
    记hyper-v导致的privoxy error(fatal error: can't bind to 127.0.0.1:1081(error number:0)),附解决方法
    Java动态代理学习笔记
    spring依赖注入中p命名空间和c命名空间区别
    python "二维" 字典(字典嵌套)
    [剑指offer] 数组中的逆序对
    [剑指offer] 复杂链表的复制
    [剑指offer] 8-10做题笔记
  • 原文地址:https://www.cnblogs.com/The-day-of-the-wind/p/11972569.html
Copyright © 2011-2022 走看看