k8s-ocp-yaml
Search…
2020-06-23-openshift4.4 在线安装(包含allinone)静态ip
本文描述openshift4.4 baremental 在线安装方式,我的环境是 vmwamre esxi 虚拟化,也适用于其他方式提供的虚拟主机或者物理机。 ocp4 注册账户即可下载畅游。 - -! 觉得好的可以买官方订阅提供更多企业服务。 采用 1master 1 worker方式,节约资源,worker节点可以参照步骤,想加多少加多少。 若采用 all in one 单节点,master多分配些资源,不再需要部署worker,在下文mster 部署及组件部署后即完成,步骤都是一样的。
之前做过4.3 的离线安装,环境坏了。这次方便点,直接用在线安装,1master 1worker。 4.3离线安装-dhcp方式,之前的文档,高可用的离线安装。 https://github.com/cai11745/k8s-ocp-yaml/blob/master/ocp4/2020-02-25-openshift4.3-install-offline-dhcp.md

部署环境介绍

比官方多了一个base节点,用来搭建部署需要的dns,仓库等服务,这台系统用Centos7.6,因为centos解决源比较方便。
其他机器都用RHCOS,就是coreos专门针对openshift的操作系统版本。
Machine
OS
vCPU
RAM
Storage
IP
bastion
Centos7.6
2
8GB
100 GB
192.168.2.20
bootstrap-0
RHCOS
2
4GB
100 GB
192.168.2.21
master-0
RHCOS
8
16 GB
100 GB
192.168.2.22
worker-0
RHCOS
16
32 GB
100 GB
192.168.2.23
节点角色: 1台 基础服务节点,用于安装部署所需的dhcp,dns,ftp服务。系统不限。由于单master,这台上面不用部署负载了。 1台 部署引导节点 Bootstrap,用于安装openshift集群,在集群安装完成后可以删除。系统RHCOS 1台 控制节点 Control plane,即master,通常使用三台部署高可用,etcd也部署在上面。系统RHCOS 2台 计算节点 Compute,用于运行openshift基础组件及应用 。系统RHCOS

安装顺序

顺序就是先准备基础节点,包括需要的dns、文件服务器、引导文件等,然后安装引导机 bootstrap,再后面就是 master, 再 node

安装准备-镜像仓库

安装base基础组件节点

|base|centos7.6|4|8GB|100 GB|192.168.2.20|
安装系统 centos7.6 mini 设置IP,设置主机名,关闭防火墙和selinux 注意所有节点主机名采用三级域名格式 如 master1.aa.bb.com
base 节点最好安装ntp 服务对下时间,确保时间正常,若时间异常部署节点时拉取镜像会报错 "x509: certificate has expired or is not yet valid"
1
hostnamectl set-hostname bastion.ocp4.example.com
2
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
3
setenforce 0
4
systemctl disable firewalld
5
systemctl stop firewalld
Copied!

下载安装文件

https://cloud.redhat.com/openshift/install/metal/user-provisioned 没有账号就注册一个 下载 openshift-install-linux.tar.gz pull-secret.txt openshift-client-linux.tar.gz rhcos-4.4.3-x86_64-installer.x86_64.iso rhcos-4.4.3-x86_64-metal.x86_64.raw.gz 分别是安装文件,镜像拉取密钥,openshift linux client (oc 命令),RHCOS 安装文件,都从上面同一个页面下载,如果节点之前有oc命令,删掉,使用下载的最新的
安装 openshift-install 和 oc 命令
1
tar -zxvf openshift-install-linux.tar.gz
2
chmod +x openshift-install
3
mv openshift-install /usr/local/bin/
4
5
tar -zxvf openshift-client-linux.tar.gz
6
chmod +x oc kubectl
7
mv oc kubectl /usr/local/bin/
Copied!

配置dns server

base节点 worker 节点连接 master 都是通过域名的,需要有一个dns server 负责域名解析
1
yum install dnsmasq -y
2
3
# 配置dnsmasq,配置文件如下
4
cd /etc/dnsmasq.d/
5
6
vi ocp4.conf
7
address=/api.ocp4.example.com/192.168.2.20
8
address=/api-int.ocp4.example.com/192.168.2.20
9
address=/.apps.ocp4.example.com/192.168.2.22
10
address=/etcd-0.ocp4.example.com/192.168.2.22
11
srv-host=_etcd-server-ssl._tcp.ocp4.example.com,etcd-0.ocp4.example.com,2380,10
12
13
# api 和api-int 指向base本机,本机会部署haproxy 负载到 bootstrap 和master
14
# .apps 这个用作应用的泛域名解析,写master的,一开始route 会部署到master节点
15
# etcd-0 写master的
16
17
# 启动服务
18
systemctl start dnsmasq
19
systemctl enable dnsmasq
20
21
# 验证解析,通过nslookup 都能解析到上面对应的ip
22
yum install bind-utils -y
23
24
nslookup api.ocp4.example.com 192.168.2.20
25
nslookup api-int.ocp4.example.com 192.168.2.20
26
nslookup 333.apps.ocp4.example.com 192.168.2.20
27
nslookup etcd-0.apps.ocp4.example.com 192.168.2.20
Copied!

准备安装配置文件

base节点 新建一个目录用于存放安装配置文件。目录不要建在 /root 下,后面httpd 服务权限会有问题。
1
mkdir /opt/install
2
cd /opt/install
3
4
5
# 编辑安装配置文件
6
vi install-config.yaml
7
8
9
apiVersion: v1
10
baseDomain: example.com #1
11
compute:
12
- hyperthreading: Enabled
13
name: worker
14
replicas: 0 #2
15
controlPlane:
16
hyperthreading: Enabled
17
name: master
18
replicas: 1 #3
19
metadata:
20
name: ocp4 #4
21
networking:
22
clusterNetwork:
23
- cidr: 10.128.0.0/14 #5
24
hostPrefix: 23
25
networkType: OpenShiftSDN
26
serviceNetwork:
27
- 172.30.0.0/16 #5
28
platform:
29
none: {} #6
30
fips: false
31
pullSecret: '{"auths": ...}' #7
32
sshKey: 'ssh-ed25519 AAAA...' #8
Copied!
参数解读: 1. 基础域名 2. 因为work部署后面是单独执行的,这边写0 3. 单master,所以写1 4. 就是节点master/worker名称后面一级,这也是为什么主机名要用好几级 5. pod ip 和service ip范围,需要注意不能和内网已有ip范围冲突 6. 我们这属于直接裸金属安装类别,所有不填 7. 这是上一节从网页下载的 pull-secret.txt 内容,需要在txt 内容两头加上单引号 8. 用于后面免密登录。 ssh-keygen -t rsa -b 2048 -N "" -f /root/.ssh/id_rsa ;cat /root/.ssh/id_rsa.pub ;内容两头带上单引号填入sshKey
备份下配置文件,必须,因为下面命令执行后这个 yaml 文件就消失了
1
cp install-config.yaml install-config.yaml.bak.0619
2
3
# 生成kubernetes配置
4
# 这个--dir 是有install-config.yaml 的路径
5
openshift-install create manifests --dir=/opt/install
6
7
# 生成引导配置
8
openshift-install create ignition-configs --dir=/opt/install/
9
10
文件目录现在是这样
11
.
12
├── auth
13
│ ├── kubeadmin-password
14
│ └── kubeconfig
15
├── bootstrap.ign
16
├── master.ign
17
├── metadata.json
18
└── worker.ign
Copied!

部署 httpd 文件服务器

部署在base节点,用于openshift节点部署时候拉取配置文件
1
# 安装httpd
2
yum install httpd -y
3
4
# 把/root/install 目录软链到 /var/www/html 下,可以把这个 raw.gz 文件名字改短点,后面手动输入省心点
5
mv ocp4.4/rhcos-4.4.3-x86_64-metal.x86_64.raw.gz /opt/install/
6
ln -s /opt/install/ /var/www/html/install
7
chmod 777 -R /opt/install/
8
9
# 启动服务
10
systemctl start httpd
11
systemctl enable httpd
Copied!
浏览器访问下 base节点, http://192.168.2.20/install/ 可以查看到目录下的文件,点开一个文件确认下有查看权限,万一没权限没给到后面安装会失败,无法拉取文件

部署haproxy

部署在base节点,负载到 bootstrap 和master api 6443 端口
1
yum install haproxy -y
2
cd /etc/haproxy/
3
vi haproxy.cfg #在最下面加配置文件,也可以把自带的frontend 和backend删掉,没有用
4
5
# 可选项,可以通过页面查看负载监控状态
6
listen stats
7
bind :9000
8
mode http
9
stats enable
10
stats uri /
11
monitor-uri /healthz
12
13
# 负载master api,bootstrap 后面删掉
14
frontend openshift-api-server
15
bind *:6443
16
default_backend openshift-api-server
17
mode tcp
18
option tcplog
19
20
backend openshift-api-server
21
balance source
22
mode tcp
23
server bootstrap 192.168.2.21:6443 check
24
server master0 192.168.2.22:6443 check
25
26
frontend machine-config-server
27
bind *:22623
28
default_backend machine-config-server
29
mode tcp
30
option tcplog
31
32
backend machine-config-server
33
balance source
34
mode tcp
35
server bootstrap 192.168.2.21:22623 check
36
server master0 192.168.2.22:22623 check
Copied!
启动服务
1
systemctl enable haproxy && systemctl start haproxy
Copied!
验证服务
通过浏览器页面查看 IP:9000 可以看到haproxy的监控页面,当前后端服务还没起,所以很多红色的。

安装 bootstrap

在虚拟化中按照之前的配置规划创建系统,使用 rhcos-4.4.3-x86_64-installer.x86_64.iso 启动系统
在安装界面 "Install RHEL CoreOS" , 按 Tab 键修改启动参数。 在 coreos.inst = yes 之后添加。仔细校对参数,不能粘贴
ip=192.168.2.21::192.168.2.1:255.255.255.0:bootstrap.ocp4.example.com:ens192:none nameserver=192.168.2.20 coreos.inst.install_dev=sda coreos.inst.image_url=http://192.168.2.20/install/rhcos-4.4.3-x86_64-metal.x86_64.raw.gz coreos.inst.ignition_url=http://192.168.2.20/install/bootstrap.ign
ip=.. 对应的参数是 ip=ipaddr::gateway:netmask:hostnameFQDN:网卡名称:是否开启dhcp
网卡名称和磁盘名称参照base节点,一样的命名规则,后面两个http文件先在base节点 wget 测试下能否下载
仔细检查,出错了会进入shell界面,可以排查问题。然后重启再输入一次
安装完成后,从base节点 ssh [email protected] 进入bootstrap 节点
1
检查下端口已经开启
2
ss -tulnp|grep 6443
3
ss -tulnp|grep 22623
4
5
sudo crictl pods
6
会有7个正常的pod
7
[[email protected] ~]$ sudo crictl pods
8
POD ID CREATED STATE NAME NAMESPACE ATTEMPT
9
8e8954862fcb7 12 minutes ago Ready bootstrap-kube-scheduler-bootstrap.ocp4.example.com kube-system 0
10
93b2815644aa7 12 minutes ago Ready cloud-credential-operator-bootstrap.ocp4.example.com openshift-cloud-credential-operator 0
11
065b168e882df 12 minutes ago Ready bootstrap-kube-controller-manager-bootstrap.ocp4.example.com kube-system 0
12
eca6297ed38a4 12 minutes ago Ready bootstrap-cluster-version-operator-bootstrap.ocp4.example.com openshift-cluster-version 0
13
9c1ab43da5714 12 minutes ago Ready bootstrap-kube-apiserver-bootstrap.ocp4.example.com kube-system 0
14
f90a312794fd9 13 minutes ago Ready bootstrap-machine-config-operator-bootstrap.ocp4.example.com default 0
15
7a10cdbd474a1 13 minutes ago Ready etcd-bootstrap-member-bootstrap.ocp4.example.com openshift-etcd 0
16
17
# 查看服务状态的命令,ssh进去的时候就会提示这条命令
18
journalctl -b -f -u bootkube.service
Copied!

安装 master

同上,注意ip、主机名、ign配置文件和上述不同
ip=192.168.2.22::192.168.2.1:255.255.255.0:master0.ocp4.example.com:ens192:none nameserver=192.168.2.20 coreos.inst.install_dev=sda coreos.inst.image_url=http://192.168.2.20/install/rhcos-4.4.3-x86_64-metal.x86_64.raw.gz coreos.inst.ignition_url=http://192.168.2.20/install/master.ign
装完后 master 的apiserver 会有问题,后面处理
1
mkdir ~/.kube
2
cp /opt/install/auth/kubeconfig ~/.kube/config
3
4
echo '192.168.2.19 api.ocp4.example.com api-int.ocp4.example.com' >>/etc/hosts
5
6
[[email protected] ~]# oc get node
7
NAME STATUS ROLES AGE VERSION
8
master0.ocp4.example.com Ready master,worker 163m v1.17.1
Copied!
master 上的etcd 没起得来,导致了master的apiserver 也是异常的,需要改下etcd参数
1
[[email protected] ~]# oc get pod -A |grep api
2
openshift-kube-apiserver kube-apiserver-master0.ocp4.example.com 3/4 CrashLoopBackOff 30 47s
3
4
# 改etcd
5
oc patch etcd cluster -p='{"spec": {"unsupportedConfigOverrides": {"useUnsupportedUnsafeNonHANonProductionUnstableEtcd": true}}}' --type=merge
6
7
# 然后master 的etcd 会被拉起来
8
[[email protected] ~]# oc -n openshift-etcd get pod -owide
9
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
10
etcd-master0.ocp4.example.com 3/3 Running 0 10m 192.168.2.22 master0.ocp4.example.com <none> <none>
11
12
# 观察apiserver 至恢复正常,一直不好就删pod重启看下
13
[[email protected] ~]# oc -n openshift-kube-apiserver get pod -owide |grep Running
14
kube-apiserver-master0.ocp4.example.com 4/4 Running 3 2m37s 192.168.2.22 master0.ocp4.example.com <none> <none>
Copied!
master节点完成了
base 节点执行下面命令完成master节点安装
1
openshift-install --dir=/opt/install wait-for bootstrap-complete --log-level=debug
2
3
这个命令主要检测master 节点是否正常工作,完成后会提示可以移除bootstrap
Copied!
现在可以修改 /etc/haproxy/haproxy.cfg 移除 bootstrap 节点的6443 和 22623, 然后重启haproxy。 或者直接改dnsmasq
因为我们只有一个master节点,或者可以直接修改dnserver配置 /etc/dnsmasq.d/ocp4.conf 的配置,将api.ocp4.example.com 和 api-int.ocp4.example.com 解析到 master节点IP 192.168.2.22 ,然后重启dnsmasq。 这种情况haproxy 服务可以关掉了。
现在master 的服务组件都安装完成了。bootstrap节点任务完成,可以关掉,已经没用了。
/opt/install/install-config.yaml 中 worker 写的0,所以ocp 会默认把master节点打上 worker的标签。 从 oc get node 可以看出。

安装其他组件

由于我们的master 有worker 的标签,也可当做计算节点。
使用 openshift-install 命令完成集群剩余组件的安装
先处理下 etcd-quorum-guard这个组件,默认是部署三个且用的主机网络,我们需要把他改成1个。
1
# 编辑文件,写入内容。必须打这个patch,不然直接改副本数,还会恢复回去
2
[[email protected] opt]# vi etcd_quorum_guard.yaml
3
4
- op: add
5
path: /spec/overrides
6
value:
7
- kind: Deployment
8
group: apps/v1
9
name: etcd-quorum-guard
10
namespace: openshift-machine-config-operator
11
unmanaged: true
12
13
14
oc patch clusterversion version --type json -p "$(cat etcd_quorum_guard.yaml)"
15
16
oc scale --replicas=1 deployment/etcd-quorum-guard -n openshift-machine-config-operator
Copied!
1
# 修改下面这些服务副本数为1 ,不然后面过不去
2
oc scale --replicas=1 ingresscontroller/default -n openshift-ingress-operator
3
oc scale --replicas=1 deployment.apps/console -n openshift-console
4
oc scale --replicas=1 deployment.apps/downloads -n openshift-console
5
oc scale --replicas=1 deployment.apps/oauth-openshift -n openshift-authentication
6
oc scale --replicas=1 deployment.apps/packageserver -n openshift-operator-lifecycle-manager
7
8
oc scale --replicas=1 deployment.apps/prometheus-adapter -n openshift-monitoring
9
oc scale --replicas=1 deployment.apps/thanos-querier -n openshift-monitoring
10
oc scale --replicas=1 statefulset.apps/prometheus-k8s -n openshift-monitoring
11
oc scale --replicas=1 statefulset.apps/alertmanager-main -n openshift-monitoring
12
13
14
openshift-install --dir=/opt/install wait-for install-complete --log-level debug
15
16
主要检查平台的web 监控等组件,完成后会提示登录地址和密码
17
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp4.example.com
18
INFO Login to the console with user: kubeadmin, password: JzPpM-hVUJn-o2PD7-RKtoe
19
20
查看所有pod 状态
21
oc get pod -A
Copied!
检查所有组件,avaiable 都是 true,如果有个别有问题,可以等worker部署完了慢慢排查。
1
[[email protected] ~]# oc get clusteroperator
2
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE
3
authentication 4.4.9 True False False 7m8s
4
cloud-credential 4.4.9 True False False 46m
5
cluster-autoscaler 4.4.9 True False False 7m32s
6
console 4.4.9 True False False 38s
7
csi-snapshot-controller 4.4.9 True False False 11m
8
dns 4.4.9 True False False 11m
9
etcd 4.4.9 True False False 16m
10
image-registry 4.4.9 True False False 11m
11
ingress 4.4.9 True False False 9m18s
12
insights 4.4.9 True False False 11m
13
kube-apiserver 4.4.9 True False False 14m
14
kube-controller-manager 4.4.9 True False False 18m
15
kube-scheduler 4.4.9 True False False 19m
16
kube-storage-version-migrator 4.4.9 True False False 11m
17
machine-api 4.4.9 True False False 11m
18
machine-config 4.4.9 True False False 20m
19
marketplace 4.4.9 True False False 11m
20
monitoring 4.4.9 True False False 6m29s
21
network 4.4.9 True False False 21m
22
node-tuning 4.4.9 True False False 11m
23
openshift-apiserver 4.4.9 True False False 3m41s
24
openshift-controller-manager 4.4.9 True False False 11m
25
openshift-samples 4.4.9 True False False 5m26s
26
operator-lifecycle-manager 4.4.9 True False False 21m
27
operator-lifecycle-manager-catalog 4.4.9 True False False 21m
28
operator-lifecycle-manager-packageserver 4.4.9 True False False 4m50s
29
service-ca 4.4.9 True False False 21m
30
service-catalog-apiserver 4.4.9 True False False 21m
31
service-catalog-controller-manager 4.4.9 True False False 21m
32
storage 4.4.9 True False False 11m
Copied!
至此平台已经部署完成,组件也部署完成,若采用all in one,则到此为止。
若需要继续添加计算节点,完成下一步骤。

安装 worker

同上,注意ip、主机名、ign配置文件和上述不同
ip=192.168.2.23::192.168.2.1:255.255.255.0:worker0.ocp4.example.com:ens192:none nameserver=192.168.2.20 coreos.inst.install_dev=sda coreos.inst.image_url=http://192.168.2.20/install/rhcos-4.4.3-x86_64-metal.x86_64.raw.gz coreos.inst.ignition_url=http://192.168.2.20/install/worker.ign
当worker 在控制台看到已经部署完
在部署机执行 oc get csr 命令,查看node 节点加入申请,批准之,然后就看到了node节点。 大功告成!!! 每个node节点会有两条新的csr
1
[[email protected] opt]# oc get csr
2
NAME AGE REQUESTOR CONDITION
3
csr-bbzlk 29s system:node:worker0.ocp4.example.com Approved,Issued
4
csr-hxnvl 2m49s system:serviceaccount:openshift-machine-config-operator:node-bootstrapper Approved,Issued
5
6
[[email protected] opt]# yum install epel-release
7
[[email protected] opt]# yum install jq -y
8
[[email protected] opt]# oc get csr -ojson | jq -r '.items[] | select(.status == {} ) | .metadata.name' | xargs oc adm certificate approve
9
10
刚加进来状态是not ready,等一会就变成ready了
11
[[email protected] opt]# oc get node
12
NAME STATUS ROLES AGE VERSION
13
master0.ocp4.example.com Ready master,worker 5h25m v1.17.1
14
worker0.ocp4.example.com Ready worker 3m4s v1.17.1
Copied!
至此,整个集群部署完成,若要添加更多node节点,重复本步骤即可。

Web console 登录

ocp4的web console 入口走router了,所以找下域名 首先找到我们的域名,然后在我们自己电脑上 hosts添加解析,指向到router所在节点ip,这样就能够访问openshift 的web 控制台了
1
[[email protected] opt]# oc get route -A |grep console-openshift
2
openshift-console console console-openshift-console.apps.ocp4.example.com console https reencrypt/Redirect None
3
[[email protected] opt]# oc get pod -A -owide|grep router
4
openshift-ingress router-default-679488d97-pt5xh 1/1 Running 0 21m 192.168.2.22 master0.ocp4.example.com <none> <none>
Copied!
把这条写入hosts 192.168.2.22 oauth-openshift.apps.ocp4.example.com console-openshift-console.apps.ocp4.example.com
用户名是 kubeadmin 密码在这个文件里 cat /opt/install/auth/kubeadmin-password
后续需注意,若重启worker,则router 可能会在几台worker漂移,可以参照ocp3的做法,给某个节点打上infra 标签,再修改 router 的 nodeselector
oc -n openshift-ingress-operator get ingresscontroller/default -o yaml

参考文档

也可以顺便关注下我的github,后续更新会同步到github