Ansible通过kubernetes.core.k8s_info和kubernetes.core.k8s访问OCP
文章目录
- 环境
- OCP
- Client(Ansible控制节点)
- 步骤
- 准备工作
- 在client端配置ssh免密登录OCP端
- 在client端安装Ansible
- kubernetes.core.k8s_info
- 第1次尝试
- 在OCP端安装python和pip3
- 在OCP端安装kubernetes
- 在OCP端安装PyYAML
- 第2次尝试
- 在OCP端配置config文件
- 第3次尝试
- 其它问题
- PyYAML
- 安装/更新kubectl(可选)
- kubernetes.core.k8s
- 参考
环境
OCP
api.kai1212.cp.fyre.ibm.com-
Red Hat Enterprise Linux release 8.8 (Ootpa)
-
OpenShift 4.14.1
- Red Hat Enterprise Linux CoreOS release 4.14
-
Python 3.6.8
-
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
-
oc
[root@api.kai1212.cp.fyre.ibm.com ~]# oc version Client Version: 4.14.1 Kustomize Version: v5.0.1 Server Version: 4.14.1 Kubernetes Version: v1.27.6+f67aeb3 -
kubectl
[root@api.kai1212.cp.fyre.ibm.com ~]# kubectl version WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short. Use --output=yaml|json to get the full version. Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.4", GitCommit:"0c63f9da2694c080257111616c60005f32a5bf47", GitTreeState:"clean", BuildDate:"2023-10-20T23:16:49Z", GoVersion:"go1.20.10 X:strictfipsruntime", Compiler:"gc", Platform:"linux/amd64"} Kustomize Version: v5.0.1 Server Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.6+f67aeb3", GitCommit:"f3ec0ed759cde48849b6e3117c091b7db90c95fa", GitTreeState:"clean", BuildDate:"2023-10-20T22:20:44Z", GoVersion:"go1.20.10 X:strictfipsruntime", Compiler:"gc", Platform:"linux/amd64"}
-
Client(Ansible控制节点)
kairedhat91.fyre.ibm.com- Red Hat Enterprise Linux release 9.2 (Plow)
- Ansible 2.14.9
步骤
准备工作
在client端配置ssh免密登录OCP端
用 ssh-keygen -t rsa 命令生成密钥对,然后把公钥( /root/.ssh/id_rsa.pub )的内容添加到OCP端( api.kai1212.cp.fyre.ibm.com )的 /root/.ssh/authorized_keys 文件里。
测试一下ssh登录,确保能够免密登录。
在client端安装Ansible
在client端安装Ansible:
yum install ansible
如果报错:
No match for argument: ansible
Error: Unable to find a match: ansible
则需要配置repo源。修改 /etc/yum.repos.d/redhat.repo ,添加如下内容:
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/9/Everything/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-9
然后再安装,就OK了。
......
......
Installed:ansible-1:7.7.0-1.el9.noarch ansible-core-1:2.14.9-1.el9.x86_64 python3-cffi-1.14.5-5.el9.x86_64 python3-cryptography-36.0.1-4.el9.x86_64 python3-packaging-20.9-5.el9.noarch python3-ply-3.11-14.el9.noarchpython3-pycparser-2.20-6.el9.noarch python3-pyparsing-2.4.7-9.el9.noarch python3-resolvelib-0.5.4-5.el9.noarch sshpass-1.09-4.el9.x86_64Complete!
检查Ansible版本:
[root@kairedhat91 ~]# ansible --version
ansible [core 2.14.9]config file = /etc/ansible/ansible.cfgconfigured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python3.9/site-packages/ansibleansible collection location = /root/.ansible/collections:/usr/share/ansible/collectionsexecutable location = /usr/bin/ansiblepython version = 3.9.18 (main, Sep 7 2023, 00:00:00) [GCC 11.4.1 20230605 (Red Hat 11.4.1-2)] (/usr/bin/python3)jinja version = 3.1.2libyaml = True
编辑 /etc/ansible/hosts ,添加如下内容:
[myvm]
api.kai1212.cp.fyre.ibm.com
测试一下Ansible连通性:
[root@kairedhat91 ~]# ansible all -m ping
api.kai1212.cp.fyre.ibm.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}
kubernetes.core.k8s_info
在client端创建 test1.yml 如下:
---
- hosts: alltasks:- name: task1kubernetes.core.k8s_info:api_version: v1kind: Namespacename: myns1register: var1- name: task2debug:msg: "{{ var1 }}"
该脚本会尝试读取名为 myns1 namespace信息,当然,该namespace目前并不存在。
第1次尝试
运行 ansible-playbook test1.yml ,报错如下:
TASK [task1] **************************************************************************************************************************************************************************************************************************************
fatal: [api.kai1212.cp.fyre.ibm.com]: FAILED! => {"changed": false, "msg": "Failed to import the required Python library (kubernetes) on api.kai1212.cp.fyre.ibm.com's Python /usr/libexec/platform-python. Please read the module documentation and install it in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter"}
这是因为,按Ansible官网文档所言,需要有以下先决条件:
- python >= 3.6
- kubernetes >= 12.0.0
- PyYAML >= 3.11
在OCP端安装python和pip3
在OCP端安装python和pip3:
yum install python3
如果报错说找不到,则需要配置repo源,参考上面的做法。
安装成功,如下:
......
......
Installed:python3-pip-9.0.3-22.el8.noarch python3-setuptools-39.2.0-7.el8.noarch python36-3.6.8-38.module+el8.5.0+12207+5c5719bc.x86_64Complete!
安装好以后,查看python3和pip3的版本:
[root@api.kai1211.cp.fyre.ibm.com ~]# python3 --version
Python 3.6.8
[root@api.kai1211.cp.fyre.ibm.com ~]# pip3 -V
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)
注:如果已有python3,则可以下载安装pip3。
下载 get-pip.py 文件:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
安装pip3:
python3 get-pip.py
在OCP端安装kubernetes
在OCP端安装kubernetes:
pip3 install kubernetes
注:如果报错 AttributeError: module 'tarfile' has no attribute 'data_filter' ,则需升级pip3:
python3 -m pip install --upgrade pip
在OCP端安装PyYAML
我没有单独做这一步,应该是在安装kubernetes的同时,也安装了满足条件的PyYAML。
如果不满足条件,则可能需要重新安装kubernetes,详见下面的“其它问题”。
第2次尝试
再次运行 ansible-playbook test1.yml ,报错如下:
TASK [task1] **************************************************************************************************************************************************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions.CoreException: Could not create API client: Invalid kube-config file. No configuration found.
fatal: [api.kai1212.cp.fyre.ibm.com]: FAILED! => {"changed": false, "msg": "Could not create API client: Invalid kube-config file. No configuration found."}
这是因为我们没有指定config文件。默认的config文件是 ~/.kube/config 。
在OCP端配置config文件
在OCP端,找到kube config文件,将其复制到 ~/.kube/ 目录下:
cp /root/auth/kubeconfig ~/.kube/config
第3次尝试
再次运行 ansible-playbook test1.yml ,这次终于成功了:
TASK [task1] **************************************************************************************************************************************************************************************************************************************
ok: [api.kai1212.cp.fyre.ibm.com]TASK [task2] **************************************************************************************************************************************************************************************************************************************
ok: [api.kai1212.cp.fyre.ibm.com] => {"msg": {"api_found": true,"changed": false,"failed": false,"resources": []}
}
运行成功,只不过没找到 myns1 namespace,获取到的信息为空。
其它问题
PyYAML
如果遇到如下报错:
ERROR: Cannot uninstall 'PyYAML'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
解决方法为:
pip3 install --ignore-installed PyYAML
pip3 install kubernetes
安装/更新kubectl(可选)
下载 kubectl :
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
添加 x 属性:
chmod +x kubectl
将其放到 /usr/bin/ 目录下:
mv kubectl /usr/bin/
查看版本,比如:
[root@kai12101 ~]# kubectl version
Client Version: v1.28.4
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
The connection to the server localhost:8080 was refused - did you specify the right host or port?
kubernetes.core.k8s
前面通过 kubernetes.core.k8s_info 来读取信息,接下来我们通过 kubernetes.core.k8s 来操作k8s,比如创建一个namespace。
创建文件 test2.yml 如下:
---
- hosts: alltasks:- name: task1kubernetes.core.k8s:name: myns1api_version: v1kind: Namespacestate: present
运行结果如下:
[root@kairedhat91 ~]# ansible-playbook test2.yml
......
......
TASK [task1] **************************************************************************************************************************************************************************************************************************************
changed: [api.kai1212.cp.fyre.ibm.com]
最后,我们再次运行 test1.yml ,获取namespace myns1 的信息,结果如下:
TASK [task1] **************************************************************************************************************************************************************************************************************************************
ok: [api.kai1212.cp.fyre.ibm.com]TASK [task2] **************************************************************************************************************************************************************************************************************************************
ok: [api.kai1212.cp.fyre.ibm.com] => {"msg": {"api_found": true,"changed": false,"failed": false,"resources": [{"apiVersion": "v1","kind": "Namespace","metadata": {"annotations": {"openshift.io/sa.scc.mcs": "s0:c26,c15","openshift.io/sa.scc.supplemental-groups": "1000680000/10000","openshift.io/sa.scc.uid-range": "1000680000/10000"},"creationTimestamp": "2023-12-12T01:07:08Z","labels": {"kubernetes.io/metadata.name": "myns1","pod-security.kubernetes.io/audit": "restricted","pod-security.kubernetes.io/audit-version": "v1.24","pod-security.kubernetes.io/warn": "restricted","pod-security.kubernetes.io/warn-version": "v1.24"},"managedFields": [{"apiVersion": "v1","fieldsType": "FieldsV1","fieldsV1": {"f:metadata": {"f:labels": {"f:pod-security.kubernetes.io/audit": {},"f:pod-security.kubernetes.io/audit-version": {},"f:pod-security.kubernetes.io/warn": {},"f:pod-security.kubernetes.io/warn-version": {}}}},"manager": "pod-security-admission-label-synchronization-controller","operation": "Apply","time": "2023-12-12T01:07:08Z"},{"apiVersion": "v1","fieldsType": "FieldsV1","fieldsV1": {"f:metadata": {"f:labels": {".": {},"f:kubernetes.io/metadata.name": {}}}},"manager": "OpenAPI-Generator","operation": "Update","time": "2023-12-12T01:07:08Z"},{"apiVersion": "v1","fieldsType": "FieldsV1","fieldsV1": {"f:metadata": {"f:annotations": {".": {},"f:openshift.io/sa.scc.mcs": {},"f:openshift.io/sa.scc.supplemental-groups": {},"f:openshift.io/sa.scc.uid-range": {}}}},"manager": "cluster-policy-controller","operation": "Update","time": "2023-12-12T01:07:08Z"}],"name": "myns1","resourceVersion": "37555","uid": "7e4dcd8b-eae2-4f4a-8153-b229e279b0c4"},"spec": {"finalizers": ["kubernetes"]},"status": {"phase": "Active"}}]}
}
可见,成功获取了namespace myns1 的信息。
参考
https://blog.csdn.net/qq_55977540/article/details/120235601https://blog.csdn.net/weixin_41010198/article/details/103852838https://blog.51cto.com/99cloud/2336420https://docs.ansible.com/ansible/latest/collections/kubernetes/core/k8s_info_module.htmlhttps://docs.ansible.com/ansible/latest/collections/kubernetes/core/k8s_module.htmlhttps://www.runoob.com/w3cnote/python-pip-install-usage.htmlhttps://mirrors.aliyun.com/epel/9/Everything/x86_64/
相关文章:
Ansible通过kubernetes.core.k8s_info和kubernetes.core.k8s访问OCP
文章目录 环境OCPClient(Ansible控制节点) 步骤准备工作在client端配置ssh免密登录OCP端在client端安装Ansible kubernetes.core.k8s_info第1次尝试在OCP端安装python和pip3在OCP端安装kubernetes在OCP端安装PyYAML第2次尝试在OCP端配置config文件第3次尝…...
vscode汉化
安装插件 Chinese (Simplified) (简体中文) Language Pack for 重新打开,若还是没有汉化: 【CtrlShiftp】 输入“configure display language”,回车键 选择刚刚安装的 中文(简体)...
美易投资:美国圣诞树价格飙升,涨价的问题所在?
美国圣诞树价格飙升,商家称“拜登经济学”是导致涨价的罪魁祸首 随着圣诞节的临近,美国各地的家庭开始准备庆祝这一传统佳节。然而,今年美国的圣诞树价格却呈现出了明显的上涨趋势。据一些商家反映,这主要是由于“拜登经济学”所致…...
国内外聊天AI大比拼,你知道几个?一键了解最火聊天AI应用!
国内类ChatGPT的AI工具一网打尽 2022年,是一个不平凡的一年。ChatGPT迅速崭露头角,成为备受瞩目的热门话题。特别是在OpenAI发布了基于GPT-3.5模型的ChatGPT版本后,这一产品因其卓越的对话能力和广泛的应用潜力,很快引起了大众的…...
C++STL的vector模拟实现
文章目录 前言成员变量成员函数构造函数push_backpop_backinserterase析构函数拷贝构造 前言 成员变量 namespace but {template<class T>class vector{public:typedef T* iterator;private:iterator _start;iterator _finish;iterator _end_of_storage;}; }我们之前实…...
openssl 常用命令 pkcs12
openssl pkcs12 openssl pkcs12 官方文档 1. 描述 The pkcs12 command allows PKCS#12 files (sometimes referred to as PFX files) to be created and parsed. PKCS#12 files are used by several programs including Netscape, MSIE and MS Outlook. pkcs12 命令是用来创…...
2017下半年软工(桥接模式)
题目——桥接模式(抽象调用实现部分) package org.example.桥接模式;/*** 桥接模式的核心思想是将抽象部分与它的实现部分分离,使它们可以独立变化,就是说你在实现部分:WinImp、LinuxImp基础上还能加上RedHatImp&#…...
Hive 浅析
Hive是一个简单的LUA沙盒,除了基本的LUA解释器的功能以外,还提供了诸如热加载等功能。 了解HIVE的工作原理有利于了解Lua虚拟机的底层实现机理。 本文从是什么-怎么用-为什么三个维度介绍HIVE。 Hive Hive是什么 hive是一个简单的LUA应用框架,目前基于…...
C 语言中,结构体「.」与「->」的区别
简单来说 「 」的左边是结构体名字时用点符号「.」 「 」的左边是结构体指针时名字时用箭头「->」 对于要读取结构体种的数据时,有下面三种写法,操作是等价的。 struct ListNode a;struct ListNode *p1 &a;/*三种写法*/a.element 2333;p1->e…...
【Java Web学习笔记】5 - XML
项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/xml 零、在线文档 XML系列教程 一、XML引出 1.为什么需要XML 1.需求1 :两个程序间进行数据通信? 2.需求2:给一台服务器,做一个配置文件,当服务器程序启动时,去…...
在jupyter notebook中修改其他文件的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
如何在Android中旋转屏幕时避免重新绘制Activity
如何在Android中旋转屏幕时避免重新绘制Activity 在Android开发中,设备旋转通常导致当前活动(Activity)被销毁并重新创建,这可能导致用户界面重置和不必要的资源重新加载。然而,有时我们希望避免这种行为,…...
离线环境下安装python库(推荐pip download)
离线环境下安装python库(推荐pip download) 目录 1.需求 2.失败操作(注意) 3.成功操作 4.其它参考 1.需求 机器部署web系统环境后,就不可再次联网,所以升级python web后端,需要离线安装pyt…...
ubuntu16.04安装ROS+Gazebo
ubuntu16.04安装ROS参考文章 ros安装(一键最简安装,吹爆鱼香ROS,请叫我鱼吹) ROS篇——Ubuntu快速一键安装ROS或ROS2(通用) ubuntu安装ROS melodic(最新、超详细图文教程) 配置ubuntu以及安装ros2必要环…...
手动搭建koa+ts项目框架(路由篇)
文章目录 前言一、安装koa-router二、引入koa-router并使用三、优化路由配置总结如有启发,可点赞收藏哟~ 前言 本文基于手动搭建koats项目框架(基础篇)配置接口路由 一、安装koa-router npm i -S koa-router二、引入koa-router并使用 ./sr…...
c语言:文件操作(1)
前言:为什么要使用文件 使用文件可以让程序在不同运行之间保存和读取数据。这样可以实现持久化存储,即使程序关闭后数据也不会丢失。文件也可以用于数据交换,允许不同程序之间共享信息。在 C 语言中,文件还可以用于读取配置信息&…...
运筹学经典问题(三):最大流问题
问题描述 给定一个图网络 G ( V , E ) G(V, E) G(V,E),网络中连边的权重代表最大容量,在这个图中找出从起点到终点流量最大的路径。 数学建模 集合: I I I:点的集合; E E E:边的集合。 常量&#x…...
裸机开发与Linux驱动开发的区别
一. 简介 裸机开发,即我们常说的不带系统的单片机开发。 Linux驱动开发,即带文件系统的Linux驱动的开发。 二. 裸机开发与Linux驱动开发的区别 1. 裸机开发 比较底层,跟寄存器打交道,有些 MCU提供了库。 2. Linux驱动开发…...
【蓝桥杯选拔赛真题75】Scratch行走的螃蟹 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析
目录 scratch行走的螃蟹 一、题目要求 编程实现 二、案例分析 1、角色分析...
小型洗衣机哪个牌子质量好?迷你洗衣机排名前十名
随着内衣洗衣机的流行,很多小伙伴在纠结该不该入手一款内衣洗衣机,专门来洗一些贴身衣物,答案是非常有必要的,因为我们现在市面上的大型洗衣机只能做清洁,无法对我们的贴身衣物进行一个高强度的清洁,而小小…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
