本博文主要目的是記錄在ICP的安裝、啓動、基本功能、卸載等相關測試過程。主要涉及的知識點有:docker的安裝以及使用、kubelet相關功能的使用、Helm管理等容器相關技術。
ICP簡介
ICP爲IBM的私有云方案,基於docker以及kubernetes技術搭建。可以部署在VMWare及OpenStack等IaaS架構上,並且支持x86、POWERLinux以及zLinux架構。上層則可以通過Helm Charts部署各種IBM、第三方以及社區的鏡像及模板應用。主要相關介紹可以參見IBM官網的相關介紹3。
軟硬件環境
表1 軟件環境
軟件類別 | 軟件名稱 | 版本 |
操作系統 | RHEL | V7Update4(x86_64) |
ICP | ICP-CE(社區版本) | 2.1.0.1 |
Docker | docker-ce | 17.12.0-ce |
瀏覽器 | Google Chrome for win | 64.0.3282.18664 位) |
管理軟件主要包括上述的操作系統,此處使用RHEL的操作系統7.4版本,ICP版本爲IBM目前最新的版本,選擇社區版本進行測試。其中Docker則使用較新的17,客戶端瀏覽器是win10下的chrome,具體信息如上表所示。相關硬件信息如下所示
表2 硬件環境
硬件類別 | 硬件名稱 | 數量/容量 |
CPU | Intel(R) Xeon(R) CPU E7- 4820 @ 2.00GHz | 8cores/per cpu*4顆 |
內存 | Fujitsu | 64GB |
硬盤 | Seagate S1DHXER0 | 2TB |
網卡 | NetXen Incorporated NX3031 Multifunction | 1/10-Gigabit |
服務器名稱 | HP ProLiant DL580 G7 | 2 |
安裝測試
docker安裝
根據IBM官方文檔1的要求docker版本要求如下所示:
表3 docker要求版本
docker類型 | 要求版本 |
docker-ce | 1.12~1.13.1、17.03、17.05、17.06、17.09 |
docker-ee | 1.12~1.13.1、17.03、17.09 |
根據上表要求此處選擇版本爲17.12.0-ce,如果有自己的REPO則可以利用如下命令完成下載。
#yuminstall docker-ce
否則可以從Docker官方網站下載所需版本:https://download.docker.com/linux/static/edge/x86_64/,選擇docker-17.12.0-ce.tgz.
下載完成後完成解壓操作,解壓出來的文件如下所示
圖1 解壓docker後的文件
解壓完成後則拷貝所有文件至/usr/bin下面,並利用如下命令驗證是否可以成功使用,如下所示如果成功出現版本信息則表示成功。
[root@cs2c58 docker]# docker version
Client:
Version: 17.12.0-ce
API version: 1.35
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:05:38 2017
OS/Arch: linux/amd64
Server:
Engine:
Version: 17.12.0-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.2
Git commit: c97c6d6
Built: Wed Dec 27 20:12:29 2017
OS/Arch: linux/amd64
Experimental: false
[root@cs2c58 docker]#
由於使用的RHEL7.4使用的是systemd管理服務方式,需要手動添加/etc/systemd/system/docker.service文件用來docker服務端的停止和啓動,具體添加內容如下所示
[root@cs2c58 docker]# systemctl cat docker
# /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container
Documentation=https://docs.docker.com
After=docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=process
Restart=on-failure
StartLimitsBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
[root@cs2c58 docker]#
驗證docker服務是否正常啓動,同時利用systemctl start/stop docker來驗證是否能夠正常啓動
[root@cs2c58 docker]# systemctl status docker
● docker.service - Docker Application Container
Loaded: loaded (/etc/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2018-03-14 08:44:24 CST; 10h ago
Docs: https://docs.docker.com
Main PID: 904 (dockerd)
CGroup: /system.slice/docker.service
├─ 904 /usr/bin/dockerd
├─ 3322 docker-containerd --config /var/run/docker/containerd/containerd.toml
├─14052 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 5000 -container-ip 172.17.0.2 -container-port 5000
├─14057 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/52a71320778bafae214762fa...
└─22737 docker-applyLayer /var/lib/docker/overlay/4a1a883812cc09815a2d14fa59a40ff56e75eca40bbc72ee67892b836615b9d0/root
Mar 14 08:44:24 cs2c58 dockerd[904]: time="2018-03-14T08:44:24.875204881+08:00" level=info msg="API listen on /var/run/docker.sock"
Mar 14 08:44:24 cs2c58 systemd[1]: Started Docker Application Container.
Mar 14 15:06:55 cs2c58 dockerd[904]: time="2018-03-14T15:06:55.128224368+08:00" level=info msg="Attempting next endpoint for push after error: Get http...n refused"
Mar 14 15:06:55 cs2c58 dockerd[904]: time="2018-03-14T15:06:55.128354621+08:00" level=info msg="Attempting next endpoint for push after error: Get http...n refused"
Mar 14 15:10:31 cs2c58 dockerd[904]: time="2018-03-14T15:10:31.603763073+08:00" level=info msg="ignoring event" module=libcontainerd namespace=moby top...nerCreate"
Mar 14 15:10:31 cs2c58 dockerd[904]: time="2018-03-14T15:10:31+08:00" level=info msg="shim docker-containerd-shim started" address="/containerd-shim/mo... pid=14057
Mar 14 15:10:32 cs2c58 dockerd[904]: time="2018-03-14T15:10:32.117269875+08:00" level=warning msg="unknown container" container=52a71320778bafae214762f...ugins.moby
Mar 14 15:10:32 cs2c58 dockerd[904]: time="2018-03-14T15:10:32.226169393+08:00" level=warning msg="unknown container" container=52a71320778bafae214762f...ugins.moby
Mar 14 15:21:30 cs2c58 dockerd[904]: time="2018-03-14T15:21:30.423856068+08:00" level=info msg="Attempting next endpoint for pull after error: manifest...t unknown"
Mar 14 15:21:35 cs2c58 dockerd[904]: time="2018-03-14T15:21:35.314512914+08:00" level=info msg="Attempting next endpoint for pull after error: manifest...t unknown"
Hint: Some lines were ellipsized, use -l to show in full.
[root@cs2c58 docker]#
完成基本的準備後,爲了提高後續下載的速度此處使用了官方的鏡像加速網站。此處利用docker新版本支持的json格式,在/etc/docker/daemon.json中添加如下內容以提高下載鏡像的速度。如下所示的第一行即表示鏡像加速網站,下面一行則是本地的鏡像倉庫,下載完成一次後則能在局域網內多次快速使用相關鏡像了(本地倉庫的相關配置請參見另外一篇相關博文)。
[root@cs2c58 docker]# cat /etc/docker/daemon.json
{ "registry-mirrors":["https://registry.docker-cn.com"],
"insecure-registries":["10.1.40.58:5000"] }
[root@cs2c58 docker]#
ICP安裝
完成上述docker安裝後,請參考IBM官網中對於安裝ICP的相關要求,此次測試環境已經完全按照官方要求去搭建(PS:其實硬件稍微差一點只是速度慢一點)。由於此處使用的爲ICP社區版本不能使用期HA的功能,但是可以使用多臺工作節點。因此此處測試第一次時將master、worker、proxy節點均放到一個節點上,後續添加另外一個工作節點。下圖爲官方最小要求
安裝前準備
- 節點間的免密操作
節點之間免密登錄,主要是localhost
關鍵命令:ssh-keygen-t rsa生成公鑰,ssh-copy-id-i localhost
- 驗證免密是否成功
ssh localhost不需要密碼直接登錄
下載ibmcom/icp-inception
完成準備後則開始利用docker完成下載,使用如下命令
#docker pull ibmcom/icp-inception:2.1.0.1
完成後驗證是否下載完成,如果利用docker images可以找到則表示下載完成
[root@cs2c58 docker]# docker images |grep -i ibmcom/icp-inception
ibmcom/icp-inception-ppc64le 2.1.0.1 e615f4f30f25 2 months ago 331MB
[root@cs2c58 docker]#
安裝ICP
1.創建配置目錄,並切換到此目錄
#mkdir /opt/ibm-cloud-private-ce #cd /opt/ibm-cloud-private-ce
2.提取配置文件
#docker run -e LICENSE=accept \ -v "$(pwd)":/data ibmcom/icp-inception:2.1.0.1 cp -r cluster /data
3.驗證提取的配置文件,當前文件夾下回生成如下圖所示內容
4.以master節點作爲boot節點,保證此節點可以免密碼登錄到其他工作節點上,配置相關配置文件
1) `pwd`/cluster/hosts配置,如果是單節點的則可以將所有部分內容都填寫一個IP,此處配置HAICP,因此按照如下配置所示,其中master必須是3、5或者更多,proxy一個或多個都行(注意:同一個IP用於多個功能則需要在不同部分添加,如下所示)
2)部署環境
step1:切換到cluster目錄中
step2:部署環境,執行如下命令:
#docker run -e LICENSE=accept --net=host \ -t -v "$(pwd)":/installer/cluster \ ibmcom/icp-inception:2.1.0.1 install
上述四個步驟則能完成ICP的安裝部署,此時終端會顯示所有的Failed=0則表示正確安裝。完成後驗證方式如下所示
打開https://10.1.87.23[master_ip]:8443,默認用戶名密碼爲admin/admin
完成登錄後,顯示的DashBoard如下圖所示
重啓ICP
#systemctl restart docker kubelet
ICP安裝過程中問題
1.使用的端口被佔用
關閉該端口或者停止該端口所佔用的服務即可
利用如下命令查看端口被佔用的進程
#lsof -i:[port_id]
舉例如下圖所示,查看80端口被佔用情況。
2.網絡狀況不良
由於在install過程中需要下載必須的鏡像,而網絡狀況會影響下載速度,導致中間出現如上圖所示類似錯誤,重複執行INSTALL後則通過,狀況偶發,因此在IBM工程師的見一下提供如下表所示的必須鏡像,我們在執行INSTALL之前下將下列鏡像pull到本地,具體腳本如下所示
docker pull ibmcom/icp-inception:2.1.0.1
docker pull ibmcom/icp-catalog-ui:2.1.0.1
docker pull ibmcom/iam-policy-administration:2.1.0.1
docker pull ibmcom/kubernetes:v1.8.3
docker pull ibmcom/icp-datastore:2.1.0.1
docker pull ibmcom/icp-platform-ui:2.1.0.1
docker pull ibmcom/iam-policy-decision:2.1.0.1
docker pull ibmcom/iam-token-service:2.1.0.1
docker pull ibmcom/unified-router:2.1.0.1
docker pull ibmcom/icp-platform-api:2.1.0.1
docker pull ibmcom/icp-identity-provider:2.1.0.1
docker pull ibmcom/icp-image-manager:2.1.0.1
docker pull ibmcom/icp-router:2.1.0.1
docker pull ibmcom/icp-platform-auth:2.1.0.1
docker pull ibmcom/icp-identity-manager:2.1.0.1
docker pull ibmcom/icp-helm-api:2.1.0.1
docker pull ibmcom/icp-helm-repo:2.1.0.1
docker pull ibmcom/metering-data-manager:2.1.0.1
docker pull ibmcom/metering-server:2.1.0.1
docker pull ibmcom/metering-ui:2.1.0.1
docker pull ibmcom/metering-reader:2.1.0.1
docker pull ibmcom/service-catalog-service-catalog:v0.1.2
docker pull ibmcom/nginx-ingress-controller:0.9.0-beta.13
docker pull ibmcom/indices-cleaner:0.2
docker pull ibmcom/icp-initcontainer:1.0.0
docker pull ibmcom/rescheduler:v0.5.2
docker pull ibmcom/tiller:v2.6.0
docker pull ibmcom/cfc-router:1.2.0
docker pull ibmcom/calico-policy-controller:v0.7.0
docker pull ibmcom/kube-state-metrics:v1.0.0
docker pull ibmcom/calico-node:v2.4.1
docker pull ibmcom/grafana:4.4.3
docker pull ibmcom/calico-ctl:v1.4.0
docker pull ibmcom/calico-cni:v1.10.0
docker pull ibmcom/curl:3.6
docker pull ibmcom/filebeat:5.5.1
docker pull ibmcom/logstash:5.5.1
docker pull ibmcom/elasticsearch:5.5.1
docker pull ibmcom/alertmanager:v0.8.0
docker pull ibmcom/cfc-auth:1.2.0
docker pull ibmcom/heapster:v1.4.0
docker pull ibmcom/k8s-dns-sidecar:1.14.4
docker pull ibmcom/k8s-dns-kube-dns:1.14.4
docker pull ibmcom/k8s-dns-dnsmasq-nanny:1.14.4
docker pull ibmcom/prometheus:v1.7.1
docker pull ibmcom/kubernetes:v1.6.1
docker pull ibmcom/etcd:v3.1.5
docker pull ibmcom/node-exporter:v0.14.0
docker pull ibmcom/elasticsearch:2.4.1
docker pull ibmcom/configmap-reload:v0.1
docker pull ibmcom/defaultbackend:1.2
docker pull ibmcom/mariadb:10.1.16
docker pull ibmcom/registry:2
docker pull ibmcom/collectd-exporter:0.3.1
docker pull ibmcom/pause:3.0
其中相關鏡像的Tag以及名稱如下表所示
倉庫及名稱 | 版本號 |
ibmcom/icp-inception-ppc64le: | 2.1.0.1 |
ibmcom/icp-catalog-ui-ppc64le: | 2.1.0.1 |
ibmcom/iam-policy-administration-ppc64le: | 2.1.0.1 |
ibmcom/kubernetes-ppc64le: | v1.8.3 |
ibmcom/icp-datastore-ppc64le: | 2.1.0.1 |
ibmcom/icp-platform-ui-ppc64le: | 2.1.0.1 |
ibmcom/iam-policy-decision-ppc64le: | 2.1.0.1 |
ibmcom/iam-token-service-ppc64le: | 2.1.0.1 |
ibmcom/unified-router-ppc64le: | 2.1.0.1 |
ibmcom/icp-platform-api-ppc64le: | 2.1.0.1 |
ibmcom/icp-identity-provider-ppc64le: | 2.1.0.1 |
ibmcom/icp-image-manager-ppc64le: | 2.1.0.1 |
ibmcom/icp-router-ppc64le: | 2.1.0.1 |
ibmcom/icp-platform-auth-ppc64le: | 2.1.0.1 |
ibmcom/icp-identity-manager-ppc64le: | 2.1.0.1 |
ibmcom/icp-helm-api-ppc64le: | 2.1.0.1 |
ibmcom/icp-helm-repo-ppc64le: | 2.1.0.1 |
ibmcom/metering-data-manager-ppc64le: | 2.1.0.1 |
ibmcom/metering-server-ppc64le: | 2.1.0.1 |
ibmcom/metering-ui-ppc64le: | 2.1.0.1 |
ibmcom/metering-reader-ppc64le: | 2.1.0.1 |
ibmcom/service-catalog-service-catalog-ppc64le: | v0.1.2 |
ibmcom/nginx-ingress-controller-ppc64le: | 0.9.0-beta.13 |
ibmcom/indices-cleaner-ppc64le: | 0.2 |
ibmcom/icp-initcontainer-ppc64le: | 1.0.0 |
ibmcom/rescheduler-ppc64le: | v0.5.2 |
ibmcom/tiller-ppc64le: | v2.6.0 |
ibmcom/helm-ppc64le: | v2.6.0 |
ibmcom/calico-policy-controller-ppc64le: | v0.7.0 |
ibmcom/kube-state-metrics-ppc64le: | v1.0.0 |
ibmcom/calico-node-ppc64le: | v2.4.1 |
ibmcom/grafana-ppc64le: | 4.4.3 |
ibmcom/calico-ctl-ppc64le: | v1.4.0 |
ibmcom/calico-cni-ppc64le: | v1.10.0 |
ibmcom/curl-ppc64le: | 3.6 |
ibmcom/kibana-ppc64le: | 5.5.1 |
ibmcom/filebeat-ppc64le: | 5.5.1 |
ibmcom/logstash-ppc64le: | 5.5.1 |
ibmcom/elasticsearch-ppc64le: | 5.5.1 |
ibmcom/alertmanager-ppc64le: | v0.8.0 |
ibmcom/heapster-ppc64le: | v1.4.0 |
ibmcom/k8s-dns-sidecar-ppc64le: | 1.14.4 |
ibmcom/k8s-dns-kube-dns-ppc64le: | 1.14.4 |
ibmcom/k8s-dns-dnsmasq-nanny-ppc64le: | 1.14.4 |
ibmcom/prometheus-ppc64le: | v1.7.1 |
ibmcom/etcd-ppc64le: | v3.1.5 |
ibmcom/node-exporter-ppc64le: | v0.14.0 |
ibmcom/configmap-reload-ppc64le: | v0.1 |
ibmcom/defaultbackend-ppc64le: | 1.2 |
ibmcom/mariadb-ppc64le: | 10.1.16 |
ibmcom/registry-ppc64le: | 2 |
ibmcom/collectd-exporter-ppc64le: | 0.3.1 |
ibmcom/pause-ppc64le: | 3 |
3.重啓master或者重啓docker出現504/502Bad Gateway
開始時環境使用虛擬機作爲節點,其CPU處理速度較慢,因此分析主要原因是部分pods啓動不成功或者啓動較慢。後續更換成物理機器基本不會出現類似問題。同時可以利用命令行的方式查看當前集羣的pods狀態用來判斷資源啓動是否完成。命令行方式訪問console以及管理pods方式請參考下一篇博文
小結
此處主要記錄在RHELV7Update4下安裝ICP的過程,後續具體使用下篇博文繼續。
有幾點需要以後注意的:
1.前期瀏覽官方文檔去了解該產品時間較長,其實可以相應縮短時間,在實際測試需要時再去看。
2.由於docker使用不夠熟悉,出現:docker.service出錯導致停止服務出錯、使用哪個版本時選擇困惑、加速鏡像未使用下載速度太慢。以後對於不熟悉的內容可以先找類似的已有的去模仿(docker.service就可以仿照Centos的不用完全自己嘗試寫)、重要的技術需要提前熟悉或者明確自己所需功能
3.如果遇到問題,有人可以支持的情況下先把問題拋出去,然後自己想辦法去解決,因爲工作第一要務是完成,後續纔是學習;
4.分析問題思路需要清晰,例如上述出現不停的Retries的時候、情況偶然發生的時候就需要考慮到網絡狀況
參考鏈接
1.ICP知識庫
3.ICP介紹