OpenShift 4 - 在 CI/CD Pipeline 中创建 KubeVirt 容器虚拟机 - 方法3

OpenShift / RHEL / DevSecOps 汇总目录
说明:本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证


本文介绍的方法使用的是一个第三方的命令工具 kcli。

创建并运行 CI/CD Pipeline

  1. 执行命令,生成公钥-私钥对。
$ ssh-keygen

$ ll ~/.ssh
-rw-------. 1 dawnsky dawnsky 1679 321 12:16 id_rsa
-rw-r--r--. 1 dawnsky dawnsky  393 321 12:16 id_rsa.pub
  1. 执行命令,在 OpenShift 中创建项目和 Pipeline。
$ VM_PROJECT=my-vm
$ oc new-project $VM_PROJECT
$ oc adm policy add-scc-to-user anyuid -z default
$ oc apply -f https://gitee.com/dawnskyliu/tekton-kubevirt-demo/raw/main/pipeline.yml
  1. 在 OpenShift 控制台中找到并进入名为 deploy-demo 的 Pipeline,然后点击 “操作” 中的 “开始” 运行该 Pipeline。
  2. 在 “启动管道” 窗口中在 ssh_pub_key 中填入前面生成的公钥内容,然后点击 “开始”。
    在这里插入图片描述

访问 VM

参考《OpenShift 4 - 通过 SSH 访问 OpenShift Virtualization 的虚拟机》一文,运行一个基于 UBI 8 镜像的 Pod。

  1. 执行命令,使用 Private Key,并通过 ubi pod 和 VM 的地址登录并访问 VM。
$ oc get vmi
NAME           AGE    PHASE     IP             NODENAME             READY
production-0   127m   Running   10.217.1.213   crc-rwwzd-master-0   True
$ VM_IP=10.217.1.213
  1. 查看 VM 中的 cloud-final 服务的运行状态和日志。
$ oc rsh pod/ubi ssh -i /tmp/id_rsa fedora@${VM_IP} "systemctl status cloud-final"
● cloud-final.service - Execute cloud user/final scripts
     Loaded: loaded (/usr/lib/systemd/system/cloud-final.service; enabled; vendor preset: disabled)
     Active: active (exited) since Wed 2023-03-22 08:14:58 UTC; 36min ago
    Process: 789 ExecStart=/usr/bin/cloud-init modules --mode=final (code=exited, status=0/SUCCESS)
   Main PID: 789 (code=exited, status=0/SUCCESS)
        CPU: 3min 6.052s

Mar 22 08:14:54 production-0 ec2[4237]: #############################################################
Mar 22 08:14:54 production-0 ec2[4237]: -----BEGIN SSH HOST KEY FINGERPRINTS-----
Mar 22 08:14:54 production-0 ec2[4237]: 1024 SHA256:h0xnUkAJwiUCdhnbXkKDSj3rf74nqcZv3Fl/60I58x4 root@production-0 (DSA)
Mar 22 08:14:54 production-0 ec2[4237]: 256 SHA256:F3UyHItpwLD6Uh0oUPrHM4ml3BiH00cQGZpveHNNFGE root@production-0 (ECDSA)
Mar 22 08:14:54 production-0 ec2[4237]: 256 SHA256:o+aZq8RRWtn5c8rovmUYBXlT+NEM24Ki0v3+Fp90DYM root@production-0 (ED25519)
Mar 22 08:14:55 production-0 ec2[4237]: 3072 SHA256:zuAmQbd5d6XwrWGIGD36H9gxKmEH3b69LtXO+Zl4R58 root@production-0 (RSA)
Mar 22 08:14:55 production-0 ec2[4237]: -----END SSH HOST KEY FINGERPRINTS-----
Mar 22 08:14:55 production-0 ec2[4237]: #############################################################
Mar 22 08:14:56 production-0 cloud-init[793]: kcli boot finished, up 1000.35 seconds
Mar 22 08:14:58 production-0 systemd[1]: Finished Execute cloud user/final scripts.
  1. 查看 VM 中的 httpd 服务的运行状态,并访问 httpd 服务的缺省页面。
$ oc rsh pod/ubi ssh -i /tmp/id_rsa fedora@${VM_IP} "systemctl is-active httpd"
active

$ oc rsh pod/ubi curl ${VM_IP}
SNO with VMS rules! production-0

Pipeline 的 Task 解读

在名为 deploy-demo 的 Pipeline 中使用了名为 deploy-vms 的 Task 创建 VM。在 deploy-vms 任务中使用了 quay.io/karmab/kcli:latest 镜像中的 kcli 命令创建 V,此外 kcli 命令的 cmds 参数还可实现在 VM 中运行命令脚本。

     script: |
      #!/usr/bin/env bash
      echo $HOME
      mkdir $HOME/.kcli
      ls $HOME/.kcli
      echo $SSH_PUB_KEY > $HOME/.kcli/id_rsa.pub
      touch $HOME/.kcli/id_rsa
      chmod 600 $HOME/.kcli/id_rsa.pub
      echo kcli -n $NAMESPACE create vm -i $IMAGE -P numcpus=$NUMCPUS -P memory=$MEMORY -P tags=['production=ready']-P cmds=["yum -y install httpd; systemctl enable --now httpd; echo $MESSAGE \$HOSTNAME > /var/www/html/index.html"] -P embed_userdata=true $CLUSTER --count=$VMS_NUMBER
      kcli -n $NAMESPACE create vm -i $IMAGE -P numcpus=$NUMCPUS -P memory=$MEMORY -P tags=['production=ready'] -P cmds=["yum -y install httpd; systemctl enable --now httpd; echo $MESSAGE \$HOSTNAME > /var/www/html/index.html"] -P embed_userdata=true $CLUSTER --count=$VMS_NUMBER
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值