本博文主要目的是记录在ICP的安装、启动、基本功能、卸载等相关测试过程。主要涉及的知识点有:docker的安装以及使用、kubelet相关功能的使用、Helm管理等容器相关技术。
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 |
根据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]#
完成上述docker安装后,请参考IBM官网中对于安装ICP的相关要求,此次测试环境已经完全按照官方要求去搭建(PS:其实硬件稍微差一点只是速度慢一点)。由于此处使用的为ICP社区版本不能使用期HA的功能,但是可以使用多台工作节点。因此此处测试第一次时将master、worker、proxy节点均放到一个节点上,后续添加另外一个工作节点。下图为官方最小要求
节点之间免密登录,主要是localhost
关键命令:ssh-keygen-t rsa生成公钥,ssh-copy-id-i localhost
ssh localhost不需要密码直接登录
完成准备后则开始利用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]#
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如下图所示
#systemctl restart docker kubelet
关闭该端口或者停止该端口所占用的服务即可
利用如下命令查看端口被占用的进程
#lsof -i:[port_id]
举例如下图所示,查看80端口被占用情况。
由于在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 |
开始时环境使用虚拟机作为节点,其CPU处理速度较慢,因此分析主要原因是部分pods启动不成功或者启动较慢。后续更换成物理机器基本不会出现类似问题。同时可以利用命令行的方式查看当前集群的pods状态用来判断资源启动是否完成。命令行方式访问console以及管理pods方式请参考下一篇博文
此处主要记录在RHELV7Update4下安装ICP的过程,后续具体使用下篇博文继续。
有几点需要以后注意的:
1.前期浏览官方文档去了解该产品时间较长,其实可以相应缩短时间,在实际测试需要时再去看。
2.由于docker使用不够熟悉,出现:docker.service出错导致停止服务出错、使用哪个版本时选择困惑、加速镜像未使用下载速度太慢。以后对于不熟悉的内容可以先找类似的已有的去模仿(docker.service就可以仿照Centos的不用完全自己尝试写)、重要的技术需要提前熟悉或者明确自己所需功能
3.如果遇到问题,有人可以支持的情况下先把问题抛出去,然后自己想办法去解决,因为工作第一要务是完成,后续才是学习;
4.分析问题思路需要清晰,例如上述出现不停的Retries的时候、情况偶然发生的时候就需要考虑到网络状况
1.ICP知识库
2.docker-centos安装
3.ICP介绍