天天看點

9個示例解析如何通過開普勒雲平台安裝依賴

本文介紹開普勒雲平台如何安裝依賴。

Kplcloud是什麼?

kplcloud是一個基于Kubernetes的輕量級PaaS平台,通過可視化的界面對應用進行管理,降低應用容器化的對度,進而減少應用容器化的時間成本。

Kplcloud已在宜信服務于宜人财富等多個團隊,穩定運作了近兩年,目前平台已在生産環境跑着上百個應用,近千個容器。

9個示例解析如何通過開普勒雲平台安裝依賴

一、Namespace

建議将與開普勒相關的服務獨立到一個專有的 Namespace下,在Kubernetes建立新的空間。您可以執行以下指令建立該空間

$ kubectl create namespace kpaas           

或執行以下指令 :

$ kubectl apply -f install/kubernetes/namespace.yaml           

二、配置持久化存儲

2.1 持久化存儲的相關配置

這裡使用的是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           

2.2 需要調整provisioner

根據您自己的環境調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"           
9個示例解析如何通過開普勒雲平台安裝依賴
9個示例解析如何通過開普勒雲平台安裝依賴

三、安裝Redis 單點

為了友善給大家示範,redis也使用的docker版本部署在kubernetes叢集上,真實環境請使用獨立的redis伺服器或叢集

如果您還沒有初始化持久化存儲的,請在這裡持久化存儲配置好存儲類再安裝Redis服務。

3.1 安裝

$ 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叢集或不想使用Consul的話,不需要執行以下指令。 以下指令是将docker版的consul叢集安裝在您的kubernetes叢集上前提是前必須有持久化存儲。

如果您還沒有初始化持久化存儲的,請在這裡持久化存儲配置好存儲類再安裝consul叢集。

4.1 安裝

$ 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修改成您的存儲類包就好。

9個示例解析如何通過開普勒雲平台安裝依賴

ingress.yaml 提供對外通路的入口

configmap.yaml consul cluster server的配置檔案

4.2 注釋

這個kubernetes親和度問題您可能需要關注一下,如果您的kubernetes是單點,請使用以下注釋掉的代碼。否由會無法起動服務。

affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchLabels:
                  app: consul
                  component: server
              topologyKey: kubernetes.io/hostname
#          # 單節點用這個
#          preferredDuringSchedulingIgnoredDuringExecution:
#            - wight: 100
#              podAffinityTerm:
#                topologyKey: kubernetes.io/hostname           

五、安裝RabbitMQ服務

為了友善給大家示範,rabbitmq也使用的docker版本部署在kubernetes叢集上,真實環境請使用獨立的rabbitmq伺服器

如果您還沒有初始化持久化存儲的,請在這裡持久化存儲配置好存儲類再安裝rabbitMQ服務。

5.1 安裝

$ kubectl apply -f install/kubernetes/rabbitmq/statefulset.yaml
$ kubectl apply -f install/kubernetes/rabbitmq/service.yaml           

有狀态服務: statefulset.yaml 入口: ingress.yaml

kpass在rabbitmq裡需要建立:

  • Vhost: kplcloud
  • Exchanges: kplcloud-exchange
  • User: kplcloud
  • RoutingKey: kplcloud
9個示例解析如何通過開普勒雲平台安裝依賴

六、安裝Mysql服務

6.1 mysql

為了友善給大家示範,mysql也使用的docker版本部署在kubernetes叢集上,真實環境請使用獨立的mysql伺服器

如果您還沒有初始化持久化存儲的,請在這裡持久化存儲配置好存儲類再安裝mysql服務。

6.2 安裝

$ 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

本項目需要建立資料庫: kplcloud

七、安裝ELK

Logstash、ES對機器要的求比較高,建議使用獨立的ELK叢集負責日志的采集分析

如果您非要使用Docker版的elk的并且部署在Kubernetes叢集裡,如果還沒有初始貨持久化存儲,先初始化持久化存儲的,請在這裡持久化存儲配置好存儲類再安裝相關服務服務。

ELK主要包含Elasticsearch、Logstash、Kibana幾個服務,kibana和logstash可以做在Deployment,全ES需要持久化,因為日志資料是存在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           

八、安裝Harbor

鏡像倉庫就别在跑kubernetes叢集上了,似乎也跑不了,找一台容量大的有安裝Docker的伺服器進行搭建。

安裝啟動方式,請檢視官方說明:

https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

8.1 安裝

下載下傳Harbor安裝檔案,我這下的是離線處理,如果下載下傳不了請加代理

$ https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.1.tgz           

8.2 解壓

$ tar -zxvf harbor-offline-installer-v1.8.1.tgz           

8.3 配置harbor檔案 harbor.conf

## Configuration file of Harbor

# hostname設定通路位址,可以使用ip、域名,不可以設定為127.0.0.1或localhost
hostname = hub.kpaas.nsini.com

# 通路協定,預設是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 = [email protected]
email_password = abc
email_from = admin <[email protected]>
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           

8.4 啟動Harbor,直接執行./install.sh 或 docker-composer都可以

$ ./install.sh
$ docker-compose start           

九、Prometheus安裝

如果還沒有初始貨持久化存儲,先初始化持久化存儲的,請在這裡持久化存儲配置好存儲類再安裝相關服務服務。

Prometheus 需要将資料存在本地,是以需要挂載持久化存儲。

$ 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           

9.1 相關配置

configmap.yaml檔案有五個檔案:

  • etcd3.rules.yml
  • kube-state-metrics_rules.yml
  • kubelet_rule.yml
  • kubernetes_rule.yml
  • prometheus.yml

在prometheus裡引用了上面4個檔案。如果您有新的規則可以在這裡增加。

在prometheus.yml 檔案裡有配置 alerting 目前預設發身 alertmanager:9093 ,若您有自己的報警管理平台,修改該位址就行,若還想使用alertmanager的話請看安裝AlertManager。

十、安裝配置alertmanager

Alertmanager 主要是接收來自prometheus 的alert資料

10.1 安裝

可以獨立安裝不使用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           

10.2 相關配置

這裡采用webhook的方式将報警資訊發送到kplcloud平台,kplcloud接收資料處理并入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處理完的資料最終根據相應的規則推送給相應的使用者及平台等。

9個示例解析如何通過開普勒雲平台安裝依賴

十一、安裝kpaas

$ git clone github.com/kplcloud/kplcloud.git           

11.1 Docker

$ docker pull kplcloud/kplcloud:latest           

11.2 kubernetes

基礎服務安裝: install.md

若您的其他服務都已經準備好了,可以直接執行以下指令在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節點上執行一下:

$ kubectl create secret generic regcred --from-file=.dockerconfigjson=/root/.docker/config.json --type=kubernetes.io/dockerconfigjson -n default           

在每個namespace下都建立一下,這樣k8s就有權限拉取私有倉庫的鏡像了

Deployment需要把imagePullSecrets加上:

imagePullSecrets:
- name: regcred           

開源位址:

作者:宜人金科-财富技術部-創新團隊

來源:宜信技術學院