从一个简单的helloworld到charts

2018-07-23  本文已影响0人  k7s

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 

上一篇下一篇

猜你喜欢

热点阅读