本文介紹開普勒云平臺如何安裝依賴。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、虛擬主機、營銷軟件、網站建設、瓊山網站維護、網站推廣。
kplcloud是一個基于Kubernetes的輕量級PaaS平臺,通過可視化的界面對應用進行管理,降低應用容器化的對度,從而減少應用容器化的時間成本。
Kplcloud已在宜信服務于宜人財富等多個團隊,穩(wěn)定運行了近兩年,目前平臺已在生產環(huán)境跑著上百個應用,近千個容器。
建議將與開普勒相關的服務獨立到一個專有的 Namespace下,在Kubernetes創(chuàng)建新的空間。您可以執(zhí)行以下命令創(chuàng)建該空間
$ kubectl create namespace kpaas
或執(zhí)行以下命令 :
$ kubectl apply -f install/kubernetes/namespace.yaml
這里使用的是NFS的方式進行持久化,如果您有自己的持久化方案可以不使用改方案。
$ kubectl apply -f install/kubernetes/storage/serviceaccount.yaml
$ kubectl apply -f install/kubernetes/storage/rbac.yaml
$ kubectl apply -f install/kubernetes/storage/provisioner.yaml
$ kubectl apply -f install/kubernetes/storage/stroageclass.yaml
根據(jù)您自己的環(huán)境調service地址及path。
volumes:
- name: kpl-nfs-client-root
nfs:
server: 172.16.0.4
path: "/home/data"
containers:
- name: kpl-nfs-client-provisioner
image: quay.io/external_storage/nfs-client-provisioner:latest
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: 172.16.0.4
- name: NFS_PATH
value: "/home/data"
為了方便給大家演示,redis也使用的docker版本部署在kubernetes集群上,真實環(huán)境請使用獨立的redis服務器或集群
如果您還沒有初始化持久化存儲的,請在這里持久化存儲配置好存儲類再安裝Redis服務。
$ kubectl apply -f install/kubernetes/redis/statefulset.yaml
$ kubectl apply -f install/kubernetes/redis/service.yaml
$ kubectl apply -f install/kubernetes/redis/configmap.yaml
redis的配置相關信息寫在configmap里面 statefulset.yaml
官方redis默認的存在/data目錄,所以我們需要將持久化存儲目標配置在/data目錄下。
如果您的獨立的Consul集群或不想使用Consul的話,不需要執(zhí)行以下命令。 以下命令是將docker版的consul集群安裝在您的kubernetes集群上前提是前必須有持久化存儲。
如果您還沒有初始化持久化存儲的,請在這里持久化存儲配置好存儲類再安裝consul集群。
$ kubectl apply -f install/kubernetes/consul/configmap.yaml
$ kubectl apply -f install/kubernetes/consul/service.yaml
$ kubectl apply -f install/kubernetes/consul/statefulset.yaml
$ kubectl apply -f install/kubernetes/consul/ingress.yaml
咱們采用的是StatefulSet的方式部署集群,若您已經有了持久化的存儲類,將storageClassName修改成您的存儲類包就好。
ingress.yaml 提供對外訪問的入口
configmap.yaml consul cluster server的配置文件
這個kubernetes親和度問題您可能需要關注一下,如果您的kubernetes是單點,請使用以下注釋掉的代碼。否由會無法起動服務。
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app: consul
component: server
topologyKey: kubernetes.io/hostname
# # 單節(jié)點用這個
# preferredDuringSchedulingIgnoredDuringExecution:
# - wight: 100
# podAffinityTerm:
# topologyKey: kubernetes.io/hostname
為了方便給大家演示,rabbitmq也使用的docker版本部署在kubernetes集群上,真實環(huán)境請使用獨立的rabbitmq服務器
如果您還沒有初始化持久化存儲的,請在這里持久化存儲配置好存儲類再安裝rabbitMQ服務。
$ kubectl apply -f install/kubernetes/rabbitmq/statefulset.yaml
$ kubectl apply -f install/kubernetes/rabbitmq/service.yaml
有狀態(tài)服務: statefulset.yaml 入口: ingress.yaml
kpass在rabbitmq里需要創(chuàng)建:
為了方便給大家演示,mysql也使用的docker版本部署在kubernetes集群上,真實環(huán)境請使用獨立的mysql服務器
如果您還沒有初始化持久化存儲的,請在這里持久化存儲配置好存儲類再安裝mysql服務。
$ kubectl apply -f install/kubernetes/mysql/statefulset.yaml
$ kubectl apply -f install/kubernetes/mysql/service.yaml
MYSQL_ROOT_PASSWORD
: mysql用戶名MYSQL_ROOT_PASSWORD
: mysql密碼statefulset.yaml
本項目需要創(chuàng)建數(shù)據(jù)庫: kplcloud
Logstash、ES對機器要的求比較高,建議使用獨立的ELK集群負責日志的采集分析
如果您非要使用Docker版的elk的并且部署在Kubernetes集群里,如果還沒有初始貨持久化存儲,先初始化持久化存儲的,請在這里持久化存儲配置好存儲類再安裝相關服務服務。
ELK主要包含Elasticsearch、Logstash、Kibana幾個服務,kibana和logstash可以做在Deployment,全ES需要持久化,因為日志數(shù)據(jù)是存在ES上的。
$ kubectl apply -f install/kubernetes/elk/elasticsearch.yaml
$ kubectl apply -f install/kubernetes/elk/logstash.yaml
$ kubectl apply -f install/kubernetes/elk/kibana.yaml
$ kubectl apply -f install/kubernetes/elk/ingress.yaml
鏡像倉庫就別在跑kubernetes集群上了,似乎也跑不了,找一臺容量大的有安裝Docker的服務器進行搭建。
安裝啟動方式,請查看官方說明:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
下載Harbor安裝文件,我這下的是離線處理,如果下載不了請加代理
$ https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.1.tgz
$ tar -zxvf harbor-offline-installer-v1.8.1.tgz
## Configuration file of Harbor
# hostname設置訪問地址,可以使用ip、域名,不可以設置為127.0.0.1或localhost
hostname = hub.kpaas.nsini.com
# 訪問協(xié)議,默認是http,也可以設置https,如果設置https,則nginx ssl需要設置on
ui_url_protocol = http
# mysql數(shù)據(jù)庫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
# 郵件設置,發(fā)送重置密碼郵件時使用
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、本次存儲、數(shù)據(jù)庫認證。默認是db_auth,mysql數(shù)據(jù)庫認證
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
# 用戶創(chuàng)建項目權限控制,默認是everyone(所有人),也可以設置為adminonly(只能管理員)
project_creation_restriction = everyone
verify_remote_cert = on
$ ./install.sh
$ docker-compose start
如果還沒有初始貨持久化存儲,先初始化持久化存儲的,請在這里持久化存儲配置好存儲類再安裝相關服務服務。
Prometheus 需要將數(shù)據(jù)存在本地,所以需要掛載持久化存儲。
$ kubectl apply -f install/kubernetes/prometheus/deployment.yaml
$ kubectl apply -f install/kubernetes/prometheus/ingress.yaml
$ kubectl apply -f install/kubernetes/prometheus/configmap.yaml
$ kubectl apply -f install/kubernetes/prometheus/serviceaccount.yaml
$ kubectl apply -f install/kubernetes/prometheus/service.yaml
$ kubectl apply -f install/kubernetes/prometheus/persistentvolumeclaim.yaml
configmap.yaml文件有五個文件:
在prometheus里引用了上面4個文件。如果您有新的規(guī)則可以在這里增加。
在prometheus.yml 文件里有配置 alerting 目前默認發(fā)身 alertmanager:9093 ,若您有自己的報警管理平臺,修改該地址就行,若還想使用alertmanager的話請看安裝AlertManager。
Alertmanager 主要是接收來自prometheus 的alert數(shù)據(jù)
可以獨立安裝不使用Docker,以下案例是部署在kubernetes集群上。
$ kubectl apply -f install/kubernetes/alertmanager/deployment.yaml
$ kubectl apply -f install/kubernetes/alertmanager/ingress.yaml
$ kubectl apply -f install/kubernetes/alertmanager/configmap.yaml
$ kubectl apply -f install/kubernetes/alertmanager/service.yaml
這里采用webhook的方式將報警信息發(fā)送到kplcloud平臺,kplcloud接收數(shù)據(jù)處理并入rabbitmq。
apiVersion: v1
data:
config.yml: |-
global:
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s
group_interval: 5m
repeat_interval: 10m
receiver: webhook
receivers:
- name: 'webhook'
webhook_configs:
- url: 'http://kplcloud:8080/public/prometheus/alerts'
kind: ConfigMap
metadata:
name: alertmanager
kplcloud處理完的數(shù)據(jù)最終根據(jù)相應的規(guī)則推送給相應的用戶及平臺等。
$ git clone github.com/kplcloud/kplcloud.git
$ docker pull kplcloud/kplcloud:latest
基礎服務安裝: install.md
若您的其他服務都已經準備好了,可以直接執(zhí)行以下命令在kubernetes上進行部署開普勒云平臺。
$ kubectl apply -f install/kubernetes/kpaas/configmap.yaml
$ kubectl apply -f install/kubernetes/kpaas/deployment.yaml
$ kubectl apply -f install/kubernetes/kpaas/service.yaml
$ kubectl apply -f install/kubernetes/kpaas/ingress.yaml
如果您有私有倉庫,記得在master節(jié)點上執(zhí)行一下:
$ kubectl create secret generic regcred --from-file=.dockerconfigjson=/root/.docker/config.json --type=kubernetes.io/dockerconfigjson -n default
在每個namespace下都創(chuàng)建一下,這樣k8s就有權限拉取私有倉庫的鏡像了
Deployment需要把imagePullSecrets加上:
imagePullSecrets:
- name: regcred
作者:宜人金科-財富技術部-創(chuàng)新團隊
來源:宜信技術學院