Kubernetes 企業發行版、容器Pass平台 OpenShift4.3 規划裸機部署


紅帽被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用戶登陸

管理員控制台功能得到了加強,日常的集群維護都可以做

 開發者控制台也有很大的改動

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM