从一个简单的helloworld到charts

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 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,601评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,367评论 1 305
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,249评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,539评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,967评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,929评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,098评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,825评论 0 207
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,609评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,796评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,282评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,603评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,277评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,159评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,959评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,079评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,874评论 2 277

推荐阅读更多精彩内容