初试 baremetal-operator 部署裸金属服务器(一)

宿主机

开启ipv6

部署kubernetes

calico 网络方案

(步骤略)

部署 baremetal-operator-master

  1. 源码安装 go14环境
    (略)
  2. 安装新版kubectl (新版本已经默认集成)
1
2
3
#curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.19.0/bin/linux/amd64/kubectl
#chmod 755 kubectl
#mv kubectl /usr/bin/
  1. 安装baremetal operator (我部署的时候TLS版本老是有问题)
1
2
3
4
5
#export GOPROXY=https://goproxy.io
#export IRONIC_HOST="localhost"
#export IRONIC_HOST_IP="10.145.69.37"
#bash tools/install_kustomize.sh
#./tools/deploy.sh true true false false false

惊奇发现,部署好简单? 啥也不需要配置 ? 往下走。。。。

发现问题

由上图我们能够发现metal3 下面的pod卡在了init状态

1
2
3
4
5
6
7
8
9
10
11
#kubectl -n metal3 get pods metal3-ironic-64fd7499cc-nwwhb  --template '{{.status.initContainerStatuses}}'
[map[containerID:docker://4fe7c1aeeb1f07c9e2c4b3209687d858e7572376104cdb6ab70b545e33601d16 image:quay.io/metal3-io/ironic-ipa-downloader:latest imageID:docker-pullable://quay.io/metal3-io/ironic-ipa-downloader@sha256:7429ffaa87de653bcae90fc857a02d160276fd828ace2cc49ea0b5ba70de44bb lastState:map[] name:ironic-ipa-downloader ready:false restartCount:0 state:map[running:map[startedAt:2020-11-12T03:32:41Z]]]]

判断 卡在了 ironic-ipa-downloader的容器上,查看日志及进入容器 定位,日志一直输出curl下载进度
#kubectl -n metal3 logs metal3-ironic-64fd7499cc-nwwhb -c ironic-ipa-downloader
日志输出好多 nocontent

45 497M 45 228M 0 0 11768 0 12:19:07 5:38:44 6:40:23 16797* TLSv1.3 (IN), TLS app data, [no content] (0):

#kubectl -n metal3 exec -it metal3-ironic-64fd7499cc-nwwhb -c ironic-ipa-downloader
#ps -ef -c

手动执行启动脚本,发现卡在了 curl -g –verbose –fail -O http://172.22.0.1/images/ironic-python-agent.tar.headers

1
#/bin/bash -xe /usr/local/bin/get-resource.sh

定位到了问题,原因是configmap ironic-bmo-configmap-86hh74cbcc 中的 ironic agent cache url 没有配置, ironic 需要从 cache_url 将镜像下载下来,同时默认 ironic-ipa-downloader 会从国外下载ipa,450多M,很慢, 等等就好了

解决调试

1
2
3
#kubectl -n metal3 get cm ironic-bmo-configmap-86hh74cbcc -o yaml
因为我了解openstack 的ironic,所以看了cm 就觉得需要修改部分配置

思考:

  1. 裸机下载引导内核的地址是多少?

  2. 裸机该如何分配IP地址 ?

  3. IRONIC 的endpoint 地址多少?

  4. 裸机上有多个网卡该从哪个网卡启动?

    CACHEURL: http://172.22.0.1/images

    DEPLOY_KERNEL_URL: http://172.22.0.2:6180/images/ironic-python-agent.kernel
    DEPLOY_RAMDISK_URL: http://172.22.0.2:6180/images/ironic-python-agent.initramfs
    DHCP_RANGE: 172.22.0.10,172.22.0.100
    HTTP_PORT: “6180”
    IRONIC_ENDPOINT: http://172.22.0.2:6385/v1/
    IRONIC_FAST_TRACK: “true”
    IRONIC_INSPECTOR_ENDPOINT: http://172.22.0.2:5050/v1/
    PROVISIONING_INTERFACE: eth2

结合openstack使用场景,以及公司机房网络的实际环境,确定如下

我在宿主机上起了nginx并导入IPA的引导系统,

1
2
3
#mkdir /data/nginx/images -p
#wget https://images.rdoproject.org/centos8/master/rdo_trunk/current-tripleo/ironic-python-agent.tar -O /data/nginx/images/ironic-python-agent.tar
(或者自行build ramdisk)
  1. K8S上开启nginx

  2. DNSMASQ分配

  3. K8S上的ironic地址

  4. 裸机使用 eth4 网卡部署

    1
    2
    #kubectl -n baremetal-operator-system edit cm baremetal-operator-ironic 
    #kubectl -n metal3 edit cm ironic-bmo-configmap-86hh74cbcc
 CACHEURL: http://10.145.69.37:9090/images
   DEPLOY_KERNEL_URL: http://10.145.69.37:9090/images/ironic-python-agent.kernel
   DEPLOY_RAMDISK_URL: http://10.145.69.37:9090/images/ironic-python-agent.initramfs
   DHCP_RANGE: 10.145.69.3,10.145.69.4
   HTTP_PORT: "6180"
   IPA_BASEURI: http://10.145.69.37:9090/images
   IRONIC_ENDPOINT: http://10.145.69.37:6385/v1/
   IRONIC_FAST_TRACK: "true"
   IRONIC_INSECURE: "true"
   IRONIC_INSPECTOR_ENDPOINT: http://10.145.69.37:5050/v1/
   PROVISIONING_INTERFACE: eth4
1
#go run cmd/make-bm-worker/main.go -address 10.142.65.41 -password *****_***stack -user ***** worker-615|kubectl apply -f

排错:

1
2
3
4
1. ipa 报 cryptography 与openssl不兼容
openstack/requirements 中 cryptograph 改成2.6.1 版本,社区3.+版本太新了


1
#baremetal --os-endpoint http://10.145.69.37:6385/v1/ node list