• K8S 应用部署


    简介

    在上篇文章中,我们安装了K8S的基础组件,并按照网页的Dashboard控制台,接下来我们尝试使用K8S来部署我们自己的应用

    历史文章回顾

    总体概览

    在上篇中我们安装好了K8S,并进行了访问,基于之前的基础,我们开始部署我们自己的应用

    文章大致的主要内容如下:

    • 1.搭建自己私有化的镜像仓库:使用公共的docker镜像也可以,博主想体验下私有仓库,用于K8S拉取镜像
    • 2.使用Dashboard部署应用,并访问

    私有镜像仓库搭建

    注:这个搭建还是比较麻烦的,使用dockerhub的公共仓库也是没有问题,使用dockerhub的key跳过这部分

    首先找台服务器,安装docker,安装这里就不说了,官方的教程很全面

    并且按照docker compose,运行下面的命令

    yum install -y docker-compose-plugin
    
    • 1

    需要用到域名证书,这个和上篇一样:

    生成HTTP认证文件

    运行下面的命令,生成认证文件,username 和 password 换成你自己的用户和密码

    mkdir /home/docker/auth
    
    docker run --rm \
        --entrypoint htpasswd \
        httpd:alpine \
        -Bbn username password > /home/docker/auth/nginx.htpasswd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Registry 运行

    编写docker-compose.yaml文件,使用文件配置部署比较好,直接用docker命令后序不好查看

    # 先将文件夹用于存放docker register容器部署文件
    mkdir registry
    cd registry
    # 编辑文件
    vim docker-compose.yml
    
    # 填入下面的内容
    version: '3'
    
    services:
      registry:
        image: registry
        ports:
          - "1443:443"
        environment:
          - REGISTRY_AUTH=htpasswd
          - REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
          - REGISTRY_AUTH_HTPASSWD_PATH=/auth/nginx.htpasswd
          - REGISTRY_HTTP_ADDR=0.0.0.0:443
          - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/xiuxian.plus_bundle.crt
          - REGISTRY_HTTP_TLS_KEY=/certs/xiuxian.plus.key
        volumes:
          - /var/lib/registry:/var/lib/registry
          - /home/docker/auth:/auth
          - /etc/nginx/cert:/certs
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    如上面的配置文件

    我们先将相关的目录挂载下:

    • /var/lib/registry:/var/lib/registry 挂载主机目录,存储下相关的镜像,避免重启后镜像丢失
    • /home/docker/auth:/auth 将HTTP认证文件所在的目录挂载进去
    • /etc/nginx/cert:/certs 将域名证书目录挂载进去

    registry设置监听在443端口,并且将其映射到宿主机的1443端口

    剩下的都是相关的配置,认证方式,所用的认证文件,相关的ssl文件等等

    编写完成后,我们在docker-compose.yaml坐在的目录下运行下面的命令:

    # 启动
    docker compose up -d
    
    # 看下运行状态
    ➜  auth docker ps
    CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS        PORTS                                               NAMES
    4322bed9e795   registry          "/entrypoint.sh /etc…"   23 hours ago   Up 22 hours   5000/tcp, 0.0.0.0:1443->443/tcp, :::1443->443/tcp   registry-registry-1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    映射到1443端口是因为443端口被nginx占用了

    如果你们的没有被占用,直接设置映射到443端口即可

    博主的nginx相关配置如下:

    server {
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        server_name  www.xiuxian.plus xiuxian.plus;
        root         /usr/share/nginx/html;
    
        ssl_certificate "/etc/nginx/cert/xiuxian.plus_bundle.crt";
        ssl_certificate_key "/etc/nginx/cert/xiuxian.plus.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
    
         # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
    
        # docker registry的访问都是v2开头的,我们设置v2的前缀都转到registry即可
        location /v2 {
            proxy_pass https://xiuxian.plus:1443/v2;
            client_max_body_size    500m;
        }
    
        error_page 404 /404.html;
            location = /40x.html {
        }
    
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    docker 上传镜像

    搭建完成后,我们可以直接使用docker登录到镜像仓库,如何上传镜像

    # 登录
    ➜ docker login xiuxian.plus
    Authenticating with existing credentials...
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    
    # 上传镜像
    docker push xiuxian.plus/auth-java:v2.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这样基本上我们的私有镜像仓库已经可以了

    使用Dashboard部署应用,并访问

    私有仓库访问秘钥生成

    首先我们在k8s的主节点上创建用来访问我们私有仓库的秘钥:

    运行下面的命令:

    kubectl create secret docker-registry --namespace=xiuxian xiuxian.docker.register --docker-server=xiuxian.plus --docker-username=username --docker-password=password --docker-email=1243925457@qq.com
    
    • 1

    需要变化的配置如下:

    • –namespace=xiuxian :指定命名空间
    • xiuxian.docker.register :秘钥名称
    • -docker-server=xiuxian.plus :镜像仓库地址
    • –docker-username=username --docker-password=password --docker-email=1243925457@qq.com :用户名、密码和邮箱

    创建好后备用,可以用下面的命令进行查看相关信息:

    kubectl get secret --namespace=xiuxian xiuxian.docker.register --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
    kubectl get secret --namespace=xiuxian xiuxian.docker.register -o yaml
    
    • 1
    • 2

    应用部署

    在上篇中,我们已经搭建好了K8S的Dashboard,我们便可以使用它来部署我们的应用

    使用token登录Dashboard,如下:

    在这里插入图片描述

    token的获取,如果忘记了,可以在k8s的主节点上运行下面的命令进行获取

    kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
    
    • 1

    点击下面图中的,右上角的+号,我们新建一个deployment,选择表单创建,然后输入的内容大致如下:

    在这里插入图片描述

    命名空间和我们上面的对应上,如果有环境变量的话,可以在页面最后面填上,或者部署后进行修改也行

    点击确定后,我们在左侧的deployment可以看到我们的应用:

    在这里插入图片描述

    pods页面中可以看到具体的,显示部署在了那个节点:

    在这里插入图片描述

    点击进去,可以看到更详细的,我们可以看到其分配到ip

    在这里插入图片描述

    目前还不太熟悉k8s的访问方式(其实是博主service和其他方式没用尝试成功…),所以我们继续采用原始的访问方式去访问应用

    应用访问

    我们登录应用部署的节点,查看下容器情况

    # 查看当前运行的容器,可以看到我们的auth-java应用
    ➜  ~ crictl ps
    CONTAINER           IMAGE               CREATED             STATE               NAME                        ATTEMPT             POD ID
    65f738a94ab43       7548f6570748a       6 hours ago         Running             auth-java                   0                   78d02b56fcfa6
    93c138b35118e       7801cfc6d5c07       3 days ago          Running             dashboard-metrics-scraper   0                   87f8f420a8614
    c1e3fc2d6c6d9       57446aa2002e1       3 days ago          Running             kubernetes-dashboard        0                   68897036dab5f
    db3684cf5e6a2       a3447b26d32c7       5 days ago          Running             calico-node                 0                   cb13bab18abe7
    5811551b53ad0       db4da8720bcb9       5 days ago          Running             kube-proxy                  1                   2960526e1e594
    
    # 设置监听8080端口好像无效,查看下应用监听在那个端口,可以看大监听在9000端口
    ➜  ~ crictl exec 65f738a94ab43 netstat -apn
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 :::9000                 :::*                    LISTEN      1/java
    tcp        0      0 ::ffff:192.168.3.206:38186 ::ffff:139.9.159.127:3306 ESTABLISHED 1/java
    tcp        0      0 ::ffff:192.168.3.206:37896 ::ffff:139.9.159.127:3306 ESTABLISHED 1/java
    tcp        0      0 ::ffff:192.168.3.206:38038 ::ffff:139.9.159.127:3306 ESTABLISHED 1/java
    tcp        0      0 ::ffff:192.168.3.206:38090 ::ffff:139.9.159.127:3306 ESTABLISHED 1/java
    tcp        0      0 ::ffff:192.168.3.206:38124 ::ffff:139.9.159.127:3306 ESTABLISHED 1/java
    tcp        0      0 ::ffff:192.168.3.206:38218 ::ffff:139.9.159.127:3306 ESTABLISHED 1/java
    tcp        0      0 ::ffff:192.168.3.206:37954 ::ffff:139.9.159.127:3306 ESTABLISHED 1/java
    tcp        0      0 ::ffff:192.168.3.206:38076 ::ffff:139.9.159.127:3306 ESTABLISHED 1/java
    tcp        0      0 ::ffff:192.168.3.206:38138 ::ffff:139.9.159.127:3306 ESTABLISHED 1/java
    tcp        0      0 ::ffff:192.168.3.206:38198 ::ffff:139.9.159.127:3306 ESTABLISHED 1/java
    Active UNIX domain sockets (servers and established)
    Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
    unix  2      [ ]         STREAM     CONNECTED     11525779 1/java
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    然后我们访问下:

    ➜  ~ curl http://192.168.3.206:9000/app/versionCheck\?version\=1
    {"data":{"downloadUrl":null,"updateMsg":null,"latest":true},"code":200,"msg":null}# 
    
    • 1
    • 2

    我们直接使用k8s分配的ip+容器应用监听的端口进行访问

    如果看到之前博主写的:手动写docker系列的网络部分或者熟悉容器网络的,应该对这个比较熟悉

    这样,我们基本上上就访问成功,Nice

    总结

    本篇文章中,我们基于上篇部署的环境,使用Dashboard部署了我们的应用,并且成功进行了访问

    但方式不是很K8s,安装官方的说明,pods的IP会在重启后变化,需要一些更好的访问方式,这部分等博主后序尝试了

    参考链接

  • 相关阅读:
    C语言——利用矩阵LU分解法求逆、行列式
    STM32F4X SDIO(一) SD卡介绍
    07-JS事件:事件类型、事件对象、事件传播、事件委托
    基于SpringBoot实现自动装配返回属性
    外骨骼机器人混战:程天科技做“深”,傅利叶智能做“广”
    My Ninety-fifth Page - 最大子序和 - By Nicolas
    组合数学&容斥&概率与期望
    工业交换机的单模多模是什么意思?
    [Android]创建TabBar
    Python网络编程之数据的主机字节序与网络字节序
  • 原文地址:https://blog.csdn.net/github_35735591/article/details/125560043