美文网首页
从一个简单的helloworld到charts

从一个简单的helloworld到charts

作者: k7s | 来源:发表于2018-07-23 19:00 被阅读0次

    1.编写一个简单的helloworld

    1.编写helloworld的web app

    创建spring项目,修改配置文件application.yaml将程序注册端口8000

    server: 

      port: 8000

    创建HelloWorldController,添加http的get事件

    @GetMapping("")

    public String helloWorld(){

        return "Hello World!";

    }

    2.创建健康检测liveness 

    @GetMapping("/healthz")

    public String healthz(){

        return "healthy!";

    }

    kubernetes中有两个heath-check机制,一是进程级的,通过容器对应用的检测完成,弊端是不能反馈应用是否可用;二是应用级的,有三种方式(httpGet、exec、TCPSocket)完成,本例使用且常用httpGet方式完成。

    注:监控检测通常由liveness和readiness共同完成,本例较简单且单一,仅实现 liveness。

    参考:https://my.oschina.net/u/3779583/blog/1806465

    2.将应用打包成docker镜像

    1.使用maven命令将项目打包成jar,并上传到linux上

    mvn clean  package

    2.将hello-world-0.0.1-SNAPSHOT.jar同目录下创建Dockerfile文件

    touch Dockerfile

    3.Dockerfile添加以下内容

    FROM java:8

    VOLUME ./tmp

    ADD hello-world-0.0.1-SNAPSHOT.jar /app.jar

    EXPOSE 8761

    ENTRYPOINT["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

    4.使用docker build -t test/hello-world:0.0.1 .创建镜像

    注:docker build 命令最后需加 .

    5.使用 docker run -d -p 8000:8000  test/hello-world:0.0.1运行镜像

    6.通过http://外网IP:8000(端口 )访问成功访问

    3.将镜像发布到harbor私有仓库中

    1.Docker-compose 安装

    1、下载指定版本的docker-compose

        $ curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

    2、对二进制文件赋可执行权限

        $ sudo chmod +x /usr/local/bin/docker-compose

    3、测试下docker-compose是否安装成功

        $ docker-compose --version

        docker-compose version 1.13.0, build 1719ceb

    2.Harbor服务搭建

    1.下载安装harbor

        1、在线安装包

    $ wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-online-installer-v1.1.2.tgz

    $ tar xvf harbor-online-installer-v1.1.2.tgz

    2、离线安装包

    $ wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.1.2.tgz

    $ tar xvf harbor-offline-installer-v1.1.2.tgz

    2.配置Harbor 

    解压缩之后,目录下回生成harbor.conf文件,该文件就是Harbor的配置文件。

    ## Configuration file of Harbor

    # hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhosthostname = 10.236.63.76

    # 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on

    ui_url_protocol = http

    # mysql数据库root用户默认密码root123,实际使用时修改下

    db_password = root123

    max_job_workers = 3

    customize_crt = on

    ssl_cert = /data/cert/server.crt

    ssl_cert_key = /data/cert/server.key

    secretkey_path = /data

    admiral_url = NA

    # 邮件设置,发送重置密码邮件时使用

    email_identity =

    email_server = smtp.mydomain.com

    email_server_port = 25

    email_username = sample_admin@mydomain.com

    email_password = abc

    email_from = admin email_ssl = false

    # 启动Harbor后,管理员UI登录的密码,默认是Harbor12345

    harbor_admin_password = Harbor12345

    # 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证

    auth_mode = db_auth

    # LDAP认证时配置项

    #ldap_url = ldaps://ldap.mydomain.com

    #ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com#ldap_search_pwd = password

    #ldap_basedn = ou=people,dc=mydomain,dc=com

    #ldap_filter = (objectClass=person)

    #ldap_uid = uid

    #ldap_scope = 3

    #ldap_timeout = 5

    # 是否开启自注册

    self_registration = on

    # Token有效时间,默认30分钟

    token_expiration = 30

    # 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)

    project_creation_restriction = everyone

    verify_remote_cert = on

    3.启动harbor

    修改完配置文件后,在的当前目录执行./install.sh,Harbor服务就会根据当期目录下的docker-compose.yml开始下载依赖的镜像,检测并按照顺序依次启动各个服务,通过启动完成后,我们访问刚设置的hostname即可 http://10.236.63.76/,默认是80端口,如果端口占用,我们可以去修改docker-compose.yml文件中,对应服务的端口映射。

    4.登陆harbor并创建一个test项目

    5.上传镜像

    1、admin登录

    $ docker login 10.236.63.76

    Username: admin

    Password:

    Login Succeeded

    2、给镜像打tag$ docker tag test/hello-world:0.0.1 10.236.63.76/test/hello-world:0.0.1 

    3. 使用docker push 10.236.63.76/test/ hello-world :0.0.1 将镜像push到仓库

    6.拉取镜像

    1、admin登录

    $ docker login 10.236.63.76

    Username: admin

    Password:

    Login Succeeded

    2.使用docker pull 10.236.63.62/test/hello-world:0.0.1拉取镜像

    注:docker login登陆报错可以尝试以下方法

    Centos7系统:vi /etc/sysconfig/docker

    在OPTIONS的参数中添加--insecure-registry 10.236.63.76

    如:OPTIONS=’--selinux-enabled ----insecure-registry 10.236.63.76’

    或者vi /etc/docker/daemon.json

    以json串的形式添加该键值对

    重启docker

    systemctl daemon-reload

    Systemctl restart docker

    参考:https://blog.csdn.net/aixiaoyang168/article/details/73549898

    4.创建helloworld pod和服务

    注:进行本步骤之前请部署kubernetes集群,建议使用ansible一键部署新版kubernetes,建议1.9版本以上,便于在之后安装helm。

    1.编写helloworld-deployment.yaml

    apiVersion: extensions/v1beta1

    kind: Deployment

    metadata:

      name: hello-world

    spec:

      replicas: 1

      template:

        metadata:

          labels:

            app: hello-world

        spec:

          containers:

          - name: hello-world

            image: 172.16.2.10/test/helloworld:0.0.1

            livenessProbe:

              httpGet:

                path: /healthz

                port:8000

                scheme:HTTP

              initialDelaySeconds:30

              timeoutSeconds:5

              successThreshold:1

              failureThreshold:5

            ports:

              -containerPort:8000

    2.编写helloworld-service.yaml

    apiVersion: v1

    kind: Service

    metadata:

      name: hello-world

    spec:

      type: NodePort

      ports:

        - port: 8000

          nodePort: 30001

        selector:

          app: hello-world

    3.创建helloworld

    kubectl create -f helloworld-deployment.yaml

    kubectl create -f helloworld-service.yaml

    通过访问http://本机IP:30001成功访问

    5.搭建helm并将helloworld打包charts

    注:搭建Helm要求在k8s环境下,且k8s为较新版本,推荐1.9版本以上

    1.Helm客户端的安装

    #下载helm客户端压缩包

    wget https://github.com/helm/helm/archive/v2.9.1.tar.gz

    # 解压压缩包

    tar -zxvf helm-2.9.1.tar.gz

    # 把 helm 指令放到bin目录下

    mv helm-2.9.1/helm /usr/local/bin/helm

    # 验证

    helm help

    2.安装Helm服务端

    1.在kubernetes每个节点上安装socat

    yum install -y socat

    2.安装服务端(Tiller)

    # 创建服务端

    helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

    # 创建TLS认证服务端,参考地址:https://github.com/gjmzj/kubeasz/blob/master/docs/guide/helm.mdhelm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1 --tiller-tls-cert /etc/kubernetes/ssl/tiller001.pem --tiller-tls-key /etc/kubernetes/ssl/tiller001-key.pem --tls-ca-cert /etc/kubernetes/ssl/ca.pem --tiller-namespace kube-system --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

    如遇到错误 failed to list: configmaps is forbidden: User “system:serviceaccount:kube-system:default” cannot list configmaps in the namespace “kube-system”,给它分配集群管理权限

    kubectl create serviceaccount --namespace kube-system tiller

    kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

    kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

    3.验证安装成功

    # 查看 helm 版本信息

    helm version

    Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

    Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

    3.创建charts

    1.创建名为hello-world的charts

    helm create hello-world

    2.将之前创建的可运行的helloworld-deployment.yaml和helloworld-service.yaml放入templates文件夹下

    注:helloworld程序简单,程序不需引入相关依赖,也不需要传入参数。charts提供了版本控制,引入依赖,传参等配置文件。

    3.打包tar

    helm package ./hello-world

    4.在本地创建charts文件夹,并将打包的tar文件移入,生成index.yaml

    mv hello-world-0.1.0.tgz charts/

    helm serve --repo-path ./charts

    6.同步github,实现oneccp应用商店部署

    1.安装git

    yum -y install git

    2.修改项目

    #通过git clone或git push拉取项目

    git clone https://github.com/Yunjuzhen/charts.git

    #修改index.yaml文件,在结尾时间前添加本地charts/index.yaml内容如下:

    hello-world:

      - apiVersion: v1

        appVersion: "1.0"

        created: 2018-07-19T15:02:12.912875054+08:00

        description: A Helm chart for Kubernetes

        digest: 00d3dd0b553c3cb443fd8fca3b1c17b97ec478458eaa56ddff868e2d2605bc7f

        name: hello-world

        urls:

        - http://127.0.0.1:8879/hello-world-0.1.0.tgz

        version: 0.1.0

    #在stable文件下添加hello-world目录,目录下添加版本0.1.0,版本内部添加hello-world的charts源代码,目录格式如下:

    charts/stable/hello-world/0.1.0/hello-world/

    3.同步至github

    git add .

    git status

    git commit -m "Hello world!"

    git push 

    相关文章

      网友评论

          本文标题:从一个简单的helloworld到charts

          本文链接:https://www.haomeiwen.com/subject/xvajmftx.html