本文介紹開普勒雲平臺如何安裝依賴。mysql
kplcloud是一個基於Kubernetes的輕量級PaaS平臺,經過可視化的界面對應用進行管理,下降應用容器化的對度,從而減小應用容器化的時間成本。nginx
Kplcloud已在宜信服務於宜人財富等多個團隊,穩定運行了近兩年,目前平臺已在生產環境跑着上百個應用,近千個容器。git
建議將與開普勒相關的服務獨立到一個專有的 Namespace下,在Kubernetes建立新的空間。您能夠執行如下命令建立該空間github
$ kubectl create namespace kpaas
或執行如下命令 :web
$ kubectl apply -f install/kubernetes/namespace.yaml
這裏使用的是NFS的方式進行持久化,若是您有本身的持久化方案能夠不使用改方案。redis
$ 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
根據您本身的環境調service地址及path。sql
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集羣上,真實環境請使用獨立的redis服務器或集羣docker
若是您尚未初始化持久化存儲的,請在這裏持久化存儲配置好存儲類再安裝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.yamljson
官方redis默認的存在/data目錄,因此咱們須要將持久化存儲目標配置在/data目錄下。
若是您的獨立的Consul集羣或不想使用Consul的話,不須要執行如下命令。 如下命令是將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 # # 單節點用這個 # preferredDuringSchedulingIgnoredDuringExecution: # - wight: 100 # podAffinityTerm: # topologyKey: kubernetes.io/hostname
爲了方便給你們演示,rabbitmq也使用的docker版本部署在kubernetes集羣上,真實環境請使用獨立的rabbitmq服務器
若是您尚未初始化持久化存儲的,請在這裏持久化存儲配置好存儲類再安裝rabbitMQ服務。
$ kubectl apply -f install/kubernetes/rabbitmq/statefulset.yaml $ kubectl apply -f install/kubernetes/rabbitmq/service.yaml
有狀態服務: statefulset.yaml 入口: ingress.yaml
kpass在rabbitmq裏須要建立:
爲了方便給你們演示,mysql也使用的docker版本部署在kubernetes集羣上,真實環境請使用獨立的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密碼本項目須要建立數據庫: kplcloud
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
鏡像倉庫就別在跑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 # 訪問協議,默認是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 <sample_admin@mydomain.com> 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
$ ./install.sh $ docker-compose start
若是尚未初始貨持久化存儲,先初始化持久化存儲的,請在這裏持久化存儲配置好存儲類再安裝相關服務服務。
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
configmap.yaml文件有五個文件:
在prometheus裏引用了上面4個文件。若是您有新的規則能夠在這裏增長。
在prometheus.yml 文件裏有配置 alerting 目前默認發身 alertmanager:9093 ,若您有本身的報警管理平臺,修改該地址就行,若還想使用alertmanager的話請看安裝AlertManager。
Alertmanager 主要是接收來自prometheus 的alert數據
能夠獨立安裝不使用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的方式將報警信息發送到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處理完的數據最終根據相應的規則推送給相應的用戶及平臺等。
$ git clone github.com/kplcloud/kplcloud.git
$ docker pull kplcloud/kplcloud:latest
基礎服務安裝: 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
做者:宜人金科-財富技術部-創新團隊