關(guān)鍵詞:
- kubernetes
- docker
- Service Catalog
- Service Broker
- Helm
一、背景介紹
????本文主要介紹如何讓Kubernetes集群內(nèi)的應(yīng)用訪(fǎng)問(wèn)集群外的服務(wù)资昧;從而實(shí)現(xiàn)應(yīng)用與服務(wù)的分離旺嬉,解耦,使得應(yīng)用開(kāi)發(fā)人員只關(guān)注自己的核心業(yè)務(wù)邏輯本冲;而不用關(guān)心服務(wù)的生命周期准脂。
????采取的主要方案是使用Service Catalog與Service Broker技術(shù)。
????至于Service Catalog與Service Broker的原理檬洞,可以參考一下的鏈接:
????https://blog.csdn.net/dkfajsldfsdfsd/article/details/81062077
????https://github.com/kubernetes-incubator/service-catalog
????https://github.com/openservicebrokerapi/servicebroker
二狸膏、測(cè)試環(huán)境介紹
2.1 虛擬機(jī)環(huán)境介紹
系統(tǒng)類(lèi)型 |
IP |
role |
cpu |
memory |
hostname |
---|---|---|---|---|---|
CentOS 7.4.1708 | 172.16.91.215 | master | 4 | 4G | master |
CentOS 7.4.1708 | 172.16.91.216 | worker | 4 | 4G | slave1 |
CentOS 7.4.1708 | 172.16.91.217 | worker | 2 | 1G | slave2 |
注意:
最好將內(nèi)存和cpu分配的多些,不然添怔,很有可能導(dǎo)致catalog-apiserver中的etcd服務(wù)不能正常提供服務(wù)湾戳;
或者部署catalog時(shí)贤旷,修改etcd中的資源屬性配置
2.2 現(xiàn)有服務(wù)介紹
-
Kubernetes 服務(wù)
- 部署方式
kubernetes使用kubeadm方式部署的, - 版本
1.9.0 - 可以參考下面的鏈接砾脑,進(jìn)行部署
http://www.reibang.com/p/48695bd6401f
- 部署方式
-
docker 服務(wù)
- docker版本
- docker版本
-
helm 服務(wù)
helm的部署幼驶,可以參考下面的鏈接
http://www.reibang.com/p/200020e7a843
注意:
Tiller的權(quán)限設(shè)置,不要參考上面鏈接的韧衣,可以使用下面的方式:
https://github.com/kubernetes-incubator/service-catalog/blob/master/docs/install.md
三盅藻、主要步驟說(shuō)明
3.1 部署方式說(shuō)明
使用Helm來(lái)部署Service Catalog 和 Service Borker
3.2 主要分為以下步驟:
- 部署Service Catalog
- 部署版本號(hào):0.1.27
- 部署Service Borker
- 測(cè)試
四、部署Service Catalog
4.1 下載catalog-0.1.27.tgz
helm fetch svc-cat/catalog --version 0.1.27
4.2 部署Service Catalog
- 方式一:可以直接安裝部署畅铭,
- 方式二:根據(jù)自己的需求氏淑,做一些修改
4.2.1 本文采用方式二
- 解壓catalog-0.1.27.tgz
tar -zxvf catalog-0.1.27.tgz
cd catalog
- 編輯values.yaml文件
-
修改鏡像的拉取策略:
- 將imagePullPolicy: Always修改為imagePullPolicy: IfNotPresent
-
將健康校驗(yàn)禁止掉(可能是docker版本的問(wèn)題,導(dǎo)致健康校驗(yàn)總是報(bào)錯(cuò)硕噩,從而導(dǎo)致pod服務(wù)異常)
- 將enabled: true修改為enabled: false
-
或者直接使用下面的命令來(lái)替換(
下面的命令有問(wèn)題假残,還在排查中
)
sed -i 's#imagePullPolicy:?Always#imagePullPolicy:? IfNotPresent#g'?values.yaml
sed -i 's#enabled:?true#enabled:?false#g'?values.yaml
sed -i 's#image:?quay.io/kubernetes-service-catalog/service-catalog:v0.1.27#image:?registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/catalog:v0.1.27#g'?values.yaml
-
- cd templates
下面的命令,有問(wèn)題炉擅,建議手動(dòng)修改
sed -i 's#imagePullPolicy: Always#imagePullPolicy: IfNotPresent#g'?apiserver-deployment.yaml
sed -i 's#image:?quay.io/coreos/etcd:latest#image:?registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/etcd:3.2.24#g'?apiserver-deployment.yaml
注意
etcd版本守问,不一定非得是3.2.24
- 部署Service Catalog
- helm install /root/catalog --name catalog --namespace catalog
- 如何安裝失敗的話(huà),就刪除
- helm del --purge catalog
- helm del --purge catalog
- 查看部署情況
kubectl get pod -n catalog
五坑资、部署Service broker
5.1 在k8s集群外創(chuàng)建mysql服務(wù)
下載mysql:5.6鏡像(
不建議使用8.0或者最新的版本耗帕,可能會(huì)存在驗(yàn)證問(wèn)題
)
docker pull mysql:5.6-
編寫(xiě)啟動(dòng)腳本
mkdir mysql
cd mysqltee start-mysql.sh <<-'EOF'
!/bin/bash
cur_dir=`pwd`
docker stop test-mysql
docker rm test-mysql
docker run --name test-mysql -v ${cur_dir}/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
EOF -
chmod +x start-mysql.sh && ./start-mysql.sh
docker exec -it test-mysql bash
-
創(chuàng)建數(shù)據(jù)庫(kù)
mysql -uroot -p123456
create database mysql_service_broker;
show databases;
5.2 部署mysql-broker
下載mysql-broker
git clone https://github.com/xej520/shared-mysql-service-broker.gitcd shared-mysql-service-broker
kubectl apply -f k8s/namespace.yml
cp k8s/secret.yml.sample k8s/secret.yml
-
需要根據(jù)自己的實(shí)際情況,來(lái)修改密鑰
文件中袱贮,注釋的地方說(shuō)明了如何得到具體的值仿便。- 修改mysql的url地址
- 修改用戶(hù)名和密碼
- kubectl create -f k8s/secret.yaml
修改k8s/deployment.yml文件中的鏡像拉取策略
將imagePullPolicy: Always修改為imagePullPolicy: IfNotPresent修改k8s/deployment.yml文件中的鏡像
將image: making/shared-mysql-service-broker:0.0.3 修改為image: registry.cn-qingdao.aliyuncs.com/kubernetes_xingej/shared-mysql-service-broker:0.0.3-
kubectl apply -f k8s/deployment.yml
- kubectl get pod -nosb #查看部署是否成功?
- kubectl get pod -nosb #查看部署是否成功?
-
kubectl apply -f k8s/cluster-service-broker.yml
- 查看部署情況
kubectl get clusterservicebrokers,clusterserviceclasses,clusterserviceplans,serviceinstances,servicebindings -oyaml
- 查看部署情況
-
創(chuàng)建實(shí)例
- kubectl apply -f k8s/sample/service-instance.yml
- 查看實(shí)例對(duì)象是否創(chuàng)建成功攒巍?
- kubectl get clusterservicebrokers,clusterserviceclasses,clusterserviceplans,serviceinstances,servicebindings -oyaml
-
如果存在問(wèn)題嗽仪,就不要往下進(jìn)行了,先解決問(wèn)題柒莉。
-
binding
- kubectl apply -f k8s/sample/service-binding.yml
- 查看bingding對(duì)象是否創(chuàng)建成功闻坚?
- kubectl get clusterservicebrokers,clusterserviceclasses,clusterserviceplans,serviceinstances,servicebindings -oyaml
- 如果存在問(wèn)題,就不要往下進(jìn)行了兢孝,先解決問(wèn)題窿凤。
- 如果創(chuàng)建成功的話(huà),會(huì)在默認(rèn)命名空間下跨蟹,會(huì)創(chuàng)建一個(gè)secret對(duì)象雳殊,名稱(chēng)是wp-db-secret
- kubectl get secret wp-db-secret -oyaml
k8s集群內(nèi)的應(yīng)用就是通過(guò)wp-db-secret這個(gè)密鑰,訪(fǎng)問(wèn)外面的mysql服務(wù)的窗轩。
六夯秃、測(cè)試:如何使得k8s集群內(nèi)的應(yīng)用訪(fǎng)問(wèn)集群外的服務(wù)?
- 使用k8s/sample/wordpress.yaml
如果報(bào)掛載問(wèn)題的話(huà),可以做以下修改
mkdir /usr/local/wd
kubectl create -f k8s/sample/wordpress.yaml
-
kubectl get pod -owide
-
通過(guò)curl命令來(lái)獲取catalog
隨便創(chuàng)建一個(gè)pod,然后執(zhí)行下面的命令即可- curl http://admin:123456@shared-mysql-service-broker-service.osb.svc.cluster.local/v2/catalog
- curl -u admin:123456 http://shared-mysql-service-broker-service.osb.svc.cluster.local/v2/catalog
- curl -u admin:123456 http://shared-mysql-service-broker-service.osb.svc.cluster.local/v2/catalog -H "X-Broker-API-Version: 2.12"