紅帽被IBM收購之后不知道搞什么鬼,openshift的社區版okd自從3.11發布后就在也沒有更新過已經兩年了,前兩天去okd網站上看文檔驚訝的發現lastet文檔竟然更新了,詳看之后發現是從openshift4.x文檔原封不動搬過來的。。。既然文檔更新了那估計okd4.x就快了。下面就用這個文檔部署一個openshift4.3的集群
先說一下4.x對比3.x最直觀的變化:
部署方案:部署對AWS、Azure、GCP等公有雲部署支持的比較好,當然也提供了裸機部署方案
裸機部署:控制節點支持的操作系統只有rhcos,據說okd版是fedora-coreos,控制節點的部署是用kubeboot引導機的方式
集群維護:可以在web控制台上做到幾乎任何維護操作
Operators:是一套 Kubernetes 應用程序開發框架,4.x會集成一個OperatorHub,開發者可以輕松的使用里面的部署框架部署服務,而無需考慮Kubernetes上的部署過程(運維危機感又來了)
容器引擎:運行時使用CRI-O,鏡像管理使用podman,docker做工具人的機會都沒有
其他改變:鏡像倉庫、集群dns、router(ingress)等
環境信息
IP | 角色 | 主機名 | 系統 | 備注 |
192.168.1.1 | dns|dhcp|lb|操作機|下載服務|代理服務 | d.test.oc4.com | centos7 | 生產環境請分開部署 |
192.168.1.2 | 引導節點 | bootstrap.test.oc4.com | rhcos | 啟動一個bootkube服務引導控制節點,控制節點部署好就可以下掉了 |
192.168.1.3 | 控制節點 | m0.test.oc4.com | rhcos | |
192.168.1.4 | 控制節點 | m1.test.oc4.com | rhcos | |
192.168.1.5 | 控制節點 | m2.test.oc4.com | rhcos | |
192.168.1.6 | 工作節點 | w0.test.oc4.com | rhcos | |
192.168.1.7 | 工作節點 | w1.test.oc4.com | rhcos |
在 d.test.oc4.com 配置:
-
安裝需要的軟件
yum install -y dnsmasq httpd haproxy
-
配置dns和dhcp
添加 /etc/dnsmasq.d/server.conf
no-resolv server=223.5.5.5 max-cache-ttl=60 dns-forward-max=10000 cache-size=10000 clear-on-reload log-queries log-facility=/tmp/dnsmasq.log #dhcp 配置 dhcp-range=192.168.1.2,192.168.1.7,12h dhcp-option=3,192.168.1.1 dhcp-option=option:dns-server,192.168.1.1 dhcp-host=42:20:a5:1b:da:72,192.168.1.2 dhcp-host=42:20:a5:1b:da:73,192.168.1.3 dhcp-host=42:20:a5:1b:da:74,192.168.1.4 dhcp-host=42:20:a5:1b:da:75,192.168.1.5 dhcp-host=42:20:a5:1b:da:76,192.168.1.6 dhcp-host=42:20:a5:1b:da:77,192.168.1.7 # dns 配置 addn-hosts=/etc/dnsmasq.d/hosts address=/.apps.test.oc4.com/192.168.1.1
# 集群內的etcd使用dns發現組建集群 srv-host=_etcd-server-ssl._tcp.test.oc4.com,etcd-0.test.oc4.com,2380,0,100 srv-host=_etcd-server-ssl._tcp.test.oc4.com,etcd-1.test.oc4.com,2380,0,100 srv-host=_etcd-server-ssl._tcp.test.oc4.com,etcd-2.test.oc4.com,2380,0,100
添加 /etc/dnsmasq.d/hosts
# 主機名部分 cluster_name=test base_domain=oc4.com 192.168.1.1 d.oc4.com 192.168.1.1 api.test.oc4.com 192.168.1.1 api-int.test.oc4.com 192.168.1.2 bootstarp.test.oc4.com 192.168.1.3 m0.test.oc4.com 192.168.1.4 m1.test.oc4.com 192.168.1.5 m2.test.oc4.com 192.168.1.6 w0.test.oc4.com 192.168.1.7 w1.test.oc4.com # etcd部分 etcd-<index>.<cluster_name>.<base_domain> n=控制節點數 index=n-1 192.168.1.3 etcd-0.test.oc4.com 192.168.1.4 etcd-1.test.oc4.com 192.168.1.5 etcd-2.test.oc4.com
啟動服務
systemctl enable --now dnsmasq
-
配置httpd下載服務
修改/etc/httpd/conf/httpd.conf
<Directory /> AllowOverride none #Require all denied Options Indexes FollowSymLinks </Directory> Alias "/d" "/data/www"
啟動服務
systemctl enable --now httpd
-
准備需要的文件
mkdir -p /data/www cd /data/www
添加點火引導腳本(這個主要是等一下使用ios鏡像引導rhcos系統時快速點火,省得手輸參數)
bootstrap.sh
#!/bin/bash /usr/libexec/coreos-installer -d xvda \ -i http://d.test.oc4.com/d/okd/bootstrap.ign -b http://d.test.oc4.com/d/rhcos-4.3.0-x86_64-metal.raw.gz
master.sh
#!/bin/bash /usr/libexec/coreos-installer -d xvda \ -i http://d.test.oc4.com/d/okd/master.ign -b http://d.test.oc4.com/d/rhcos-4.3.0-x86_64-metal.raw.gz
worker.sh
#!/bin/bash /usr/libexec/coreos-installer -d xvda \ -i http://d.test.oc4.com/d/okd/worker.ign -b http://d.test.oc4.com/d/rhcos-4.3.0-x86_64-metal.raw.gz
准備openshift安裝和客戶端工具和rhco系統文件,到紅帽網站上下載 https://cloud.redhat.com/openshift/install/metal/user-provisioned
wget https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-install-linux-4.3.5.tar.gz # 部署配置生成工具 wget https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux.tar.gz # oc工具 wget https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.3/4.3.0/rhcos-4.3.0-x86_64-installer.iso # 引導鏡像 wget https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/4.3/4.3.0/rhcos-4.3.0-x86_64-metal.raw.gz -O /data/www/rhcos-4.3.0-x86_64-metal.raw.gz
-
配置haproxy實現LB
追加配置 /etc/haproxy/haproxy.cfg ,引導機完成工作后可以把bootstrap從負載均衡里面刪除
frontend openshift-api-server bind *:6443 default_backend openshift-api-server mode tcp option tcplog backend openshift-api-server balance source mode tcp server bootstrap 192.168.1.2:6443 check server master0 192.168.1.3:6443 check server master1 192.168.1.4:6443 check server master2 192.168.1.5:6443 check frontend machine-config-server bind *:22623 default_backend machine-config-server mode tcp option tcplog backend machine-config-server balance source mode tcp server bootstrap 192.168.1.2:22623 check server master0 192.168.1.3:22623 check server master1 192.168.1.4:22623 check server master2 192.168.1.5:22623 check frontend ingress-https bind *:443 default_backend ingress-https mode tcp option tcplog backend ingress-https balance source mode tcp server worker0 192.168.1.6:443 check server worker1 192.168.1.7:443 check
-
配置一個代理服務(在網關上配置,我的這個環境網關就是192.168.1.1)
因為這次部署需要的鏡像全部在quay.io直接下載會很慢,而且這次的部署是全自動化的鏡像不好預先下載,而且還要訪問一些國外網絡會比較慢,我在部署的過程中使用了透明代理
echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf sysctl -p iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 1081
懂的都懂
-
准備部署配置
創建安裝配置文件install-config.yaml
apiVersion: v1 baseDomain: oc4.com compute: - hyperthreading: Enabled name: worker replicas: 0 controlPlane: hyperthreading: Enabled name: master replicas: 3 metadata: name: test networking: clusterNetwork: - cidr: 10.128.0.0/14 hostPrefix: 23 networkType: OpenShiftSDN serviceNetwork: - 172.30.0.0/16 platform: none: {} fips: false pullSecret: '' sshKey: ''
pullSecret 到下載https://cloud.redhat.com/openshift/install/metal/user-provisioned
sshKey 是管理集群節點的ssh公鑰
放到文件夾中待用
mkdir -p /data/www/oc cp install-config.yaml /data/www/oc
創建kubernetes清單和系統點火文件
openshift-install create manifests --dir=/data/www/oc openshift-install create ignition-configs --dir=/data/www/oc
-
下面理一下文件
/data/www 對應的是 d.test.oc4.com/d
確保httpd服務有權限訪問這些文件
chmod 755 -R /data/www
ls /data/www/ bootstrap.sh master.sh oc rhcos-4.3.0-x86_64-metal.raw.gz worker.sh ls /data/www/oc/ auth bootstrap.ign master.ign metadata.json worker.ign
-
部署引導主機(bootstrap.test.oc4.com)
使用rhcos-4.3.0-x86_64-installer.iso鏡像啟動系統,這邊用的是xen,這里可以使用TAB編輯內核參數
coreos.inst=yes
coreos.inst.install_dev=xvda
coreos.inst.image_url=http://d.test.oc4.com/d/rhcos-4.3.0-x86_64-metal.raw.gz coreos.inst.ignition_url=http://d.test.oc4.com/d/okd/bootstrap.ign ip=dhcp
我這里沒有選擇編輯內核參數,因為在前期摸索的過程中可以要反復的還原重試,這里沒法復制會輸的比較心累
先按回車啟動,會進入一個安裝系統的終端,直接執行前面准備好的腳本
curl d.test.oc4.com/d/bootstrap.sh |bash
好了之后直接重啟,重啟完安裝就自動開始了,也可以進到引導機系統觀察引導集群的整個過程
ssh core@bootstarp.test.oc4.com journalctl -b -f -u bootkube.service
-
引導控制節點(m[0:2].test.oc4.com)
使用rhcos-4.3.0-x86_64-installer.iso鏡像啟動系統,啟動完執行
curl d.test.oc4.com/d/master.sh |bash
裝好重啟之后會嘗試連接 https://api-int.test.oc4.com:22632 當然需要引導節點初始化好才能連接
可以使用安裝程序等待安裝完成,30分鍾顯然是不夠的,有代理的情況下要300分鍾吧。。。
openshift-install --dir=/data/www/oc/ wait-for bootstrap-complete --log-level=info INFO Waiting up to 30m0s for the Kubernetes API at https://api.test.oc4.com:6443...
安裝完成后,配置一下oc客戶端訪問權限
mkdir -p $HOME/.kube cp -i cp /data/www/oc/auth/kubeconfig $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
/data/www/okd/auth/kubeadmin-password 這個文件里面保存着kubeadmin的密碼
-
引導工作節點(w[0:1].test.oc4.com)
使用rhcos-4.3.0-x86_64-installer.iso鏡像啟動系統,啟動完執行
curl d.test.oc4.com/d/worker.sh |bash
默認情況下需要批准一下節點的證書請求才能正常和master通信
yum install -y jq oc get csr -ojson | jq -r '.items[] | select(.status == {} ) | .metadata.name' | xargs oc adm certificate approve
看一下所有節點是否正常
oc get node
NAME STATUS ROLES AGE VERSION
m0.test.oc4.com Ready master,worker 52m v1.16.2
m1.test.oc4.com Ready master,worker 52m v1.16.2
m2.test.oc4.com Ready master,worker 51m v1.16.2
w0.test.oc4.com Ready worker 5m59s v1.16.2
w1.test.oc4.com Ready worker 6m1s v1.16.2
可以把ingress router 安排在這兩個節點:
先打上節點標簽
oc label node w0.test.oc4.com node-role.router=router
oc label node w1.test.oc4.com node-role.router=router
注意不能直接編輯router的Deployment配置,需要編輯ingresscontroller
ingress-operator負責ingresscontroller生命周期管理,ingresscontroller負責調用haproxy實現
oc edit ingresscontroller default -n openshift-ingress-operator
spec:
nodePlacement:
nodeSelector:
matchLabels:
node-role.router: router
-
登陸web控制台
瀏覽器打開https://console-openshift-console.apps.test.oc4.com/ 可以先使用kubeadmin用戶登陸
管理員控制台功能得到了加強,日常的集群維護都可以做
開發者控制台也有很大的改動