设为首页 收藏本站
查看: 1319|回复: 0

[经验分享] 自动化运维工具Ansible实战(三)配置和命令集

[复制链接]

尚未签到

发表于 2018-7-28 13:37:53 | 显示全部楼层 |阅读模式
一、Ansible配置
  Ansible安装好之后的配置文件有如下两种:
  1、yum安装,配置文件默认路径为:
  /etc/ansible/ansible.cfg
  2、源码包安装,配置文件路径需要从软件包里面拷贝,如下:
  

[root@Ansible ~]# mkdir /etc/ansible     --创建ansible目录  
[root@Ansible ~]# cp /usr/src/ansible-2.5.0/examples/* /etc/ansible/    --拷贝文件 *
  

  该配置文件中定义了Ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等。
  以下是配置文件的内容和详细说明:
  

[root@Ansible ~]# vim /etc/ansible/ansible.cfg  10 [defaults]        --通用默认配置
  14 #inventory      = /etc/ansible/hosts   --这个是默认库文件位置,脚本,或者存放可通信主机的目录
  15 #library        = /usr/share/my_modules/  --Ansible默认搜寻模块的位置
  16 #module_utils   = /usr/share/my_module_utils/
  17 #remote_tmp     = ~/.ansible/tmp   --Ansible通过远程传输模块到远程主机,然后远程执行,执行后在清理现场.在有些场景下,你也许想使用默认路径希望像更换补丁一样使用
  18 #local_tmp      = ~/.ansible/tmp
  19 #plugin_filters_cfg = /etc/ansible/plugin_filters.yml
  20 #forks          = 5    --在与主机通信时的默认并行进程数 ,默认是5d
  21 #poll_interval  = 15   --当具体的poll interval没有定义时,多少时间回查一下这些任务的状态, 默认值是5秒
  22 #sudo_user      = root  --sudo使用的默认用户 ,默认是root
  23 #ask_sudo_pass = True  --用来控制Ansible playbook 在执行sudo之前是否询问sudo密码.默认为no
  24 #ask_pass      = True  --控制Ansible playbook 是否会自动默认弹出密码
  25 #transport      = smart  --通信机制.默认 值为’smart’。如果本地系统支持 ControlPersist技术的话,将会使用(基于OpenSSH)‘ssh’,如果不支持讲使用‘paramiko’.其他传输选项包括‘local’, ‘chroot’,’jail’等等
  26 #remote_port    = 22  --远程SSH端口。 默认是22
  27 #module_lang    = C  --模块和系统之间通信的计算机语言,默认是C语言
  28 #module_set_locale = False
  36 #gathering = implicit  --控制默认facts收集(远程系统变量). 默认值为’implicit’, 每一次play,facts都会被收集
  59 #roles_path    = /etc/ansible/roles    -- roles 路径指的是’roles/’下的额外目录,用于playbook搜索Ansible roles
  62 #host_key_checking = False  --检查主机密钥
  87 #sudo_exe = sudo  --如果在其他远程主机上使用另一种方式执sudu操作.可以使用该参数进行更换
  89 # What flags to pass to sudo  --传递sudo之外的参数
  91 #sudo_flags = -H -S –n
  94 #timeout = 10  --ssh超时时间
  98 #remote_user = root  --使用/usr/bin/ansible-playbook链接的默认用户名,如果不指定,会使用当前登录的用户名
  
102 #log_path = /var/log/ansible.log  --日志文件存放路径
  
105 #module_name = command   --ansible命令执行默认的模块
  
110 #executable = /bin/sh  --在sudo环境下产生一个shell交互接口. 用户只在/bin/bash的或者sudo限制的一些场景中需要修改
  
115 #hash_behaviour = replace  --特定的优先级覆盖变量
  
123 #jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n  --允许开启Jinja2拓展模块
  
127 #private_key_file = /path/to/file  --私钥文件存储位置
  
131 #vault_password_file = /path/to/vault_password_file  --设置密码文件,也可以通过命令行指定“–vault-password-file”
  
136 #ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:    %M:%S by {uid} on {host}   --这个设置可以告知用户,Ansible修改了一个文件,并且手动写入的内容可能已经被覆盖
  
145 #display_skipped_hosts = True   --显示任何跳过任务的状态 ,默认是显示
  
160 #error_on_undefined_vars = False  -- 如果所引用的变量名称错误的话, 将会导致ansible在执行步骤上失败
  
166 #system_warnings = True  --允许禁用系统运行ansible相关的潜在问题警告
  
171 #deprecation_warnings = True  --允许在ansible-playbook输出结果中禁用“不建议使用”警告
  
179 # command_warnings = False  --当shell和命令行模块被默认模块简化的时,Ansible 将默认发出警告
  
203 #bin_ansible_callbacks = False  --用来控制callback插件是否在运行 /usr/bin/ansible 的时候被加载. 这个模块将用于命令行的日志系统,发出通知等特性
  
208 #nocows = 1  --默认ansible可以调用一些cowsay的特性   开启/禁用:0/1
  
226 #nocolor = 1  --输出带上颜色区别, 开启/关闭:0/1
  

  Ansible官方配置文件
  http://www.ansible.com.cn/docs/intro_configuration.html#environmental-configuration
  Ansible默认的配置都是注释掉的(#),可以通过去掉#来进行开启相应的配置服务。比如启用日志,更改相应的hosts文件的路径等等。如查看日志,当再次操作Ansible的时候就可以查看生成的日志了。
  

[root@Ansible ~]# vim /etc/ansible/ansible.cfg  
102 log_path = /var/log/ansible.log     --把注释(#)去掉
  
[root@Ansible ~]# ansible web -m  ping  --执行Ansible命令
  
192.168.8.55 | SUCCESS => {
  "changed": false,
  "ping": "pong"
  
}
  
[root@Ansible ~]# cat /var/log/ansible.log     --查看日志
  
2018-04-19 15:22:05,533 p=80580 u=root |  192.168.8.55 | SUCCESS => {
  "changed": false,
  "ping": "pong"
  
}
  

二、Ansible命令集
  安装完Ansible后,发现Ansible一共为我们提供了十个指令:ansible、ansible-console、ansible-inventory、ansible-vault、ansible-config、ansible-doc、ansible-playbook、ansible-connection、ansible-galaxy、ansible-pull。

1、ansible
  

[root@Ansible ~]# ansible -h  
Usage: ansible <host-pattern> [选项]
  

  ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。如:
  

[root@Ansible ~]# ansible 192.168.8.66 -a 'uptime'  
192.168.8.66 | SUCCESS | rc=0 >>
  15:27:24 up 1 day,  1:39,  4 users,  load average: 0.07, 0.05, 0.05
  

  
[root@Ansible ~]# ansible –help
  
Usage: ansible <host-pattern> [options]
  
**命令选项:**
  
-a MODULE_ARGS, --args=MODULE_ARGS   # 模块的参数
  
--ask-vault-pass   # vault 密码
  
-B SECONDS, --background=SECONDS   # 异步运行时,多长时间超时
  
-C, --check   # 只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生的变化
  
-D, --diff   # 当更改文件和模板时,显示这些文件得差异,比--check效果好
  
-e EXTRA_VARS, --extra-vars=EXTRA_VARS   # 添加附加变量,比如key=value,yaml,json格式
  
-f FORKS, --forks=FORKS   # 指定定要使用的并行进程数,默认为5个
  
-h, --help   # 显示此帮助信息并退出
  
-i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY   # 指定主机清单文件或逗号分隔的主机,默认为/etc/ansible/hosts(或者从源码包拷贝)
  
-l SUBSET, --limit=SUBSET   # 进一步限制所选主机/组模式,只执行-l 后的主机和组。 也可以这样使用-l @retry_hosts.txt
  
--list-hosts   # 输出匹配主机的列表,不执行其他任何操作
  
-m MODULE_NAME, --module-name=MODULE_NAME   # 要执行的模块,默认为command
  
-M MODULE_PATH, --module-path=MODULE_PATH   # 要执行的模块的路径,默认为/usr/share/ansible/
  
-o, --one-line   # 压缩输出,摘要输出.尝试一切都在一行上输出
  
--playbook-dir=BASEDIR   # 由于此工具不使用剧本,因此将其用作替代剧本目录。这为很多功能设置了相对路径,包括roles/ group_vars/etc等
  
-P POLL_INTERVAL, --poll=POLL_INTERVAL   # 如果使用-B,则设置轮询间隔,默认为15秒
  
--syntax-check   # 对playbook进行语法检查,且不执行playbook
  
-t TREE, --tree=TREE   # 日志输出到该目录,日志文件名会以主机名命名
  
--vault-id=VAULT_IDS   # 要使用的vault标识
  
--vault-password-file=VAULT_PASSWORD_FILES  # vault密码文件
  
-v, --verbose   # 输出执行的详细信息,使用-vvv获得更多,-vvvv 启用连接调试
  
--version   # 显示程序的版本号并退出
  

  
**连接选项:**
  
-k, --ask-pass   # 要求用户输入请求连接密码
  
--private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE   # 私钥路径,使用这个文件来验证连接
  
-u REMOTE_USER, --user=REMOTE_USER   # 连接远程用户,默认为空
  
-c CONNECTION, --connection=CONNECTION   # 连接类型,默认smart,支持local ssh 和 paramiko
  
-T TIMEOUT, --timeout=TIMEOUT   # 指定默认超时时间,默认是10S
  
--ssh-common-args=SSH_COMMON_ARGS   # 指定要传递给sftp/scp/ssh的常见参数 (例如 ProxyCommand)
  
--sftp-extra-args=SFTP_EXTRA_ARGS   # 指定要传递给sftp,例如-f -l
  
--scp-extra-args=SCP_EXTRA_ARGS   # 指定要传递给scp,例如 -l
  
--ssh-extra-args=SSH_EXTRA_ARGS   # 指定要传递给ssh,例如 -R
  

  
**特权升级选项:**
  
-s, --sudo   # 使用sudo (nopasswd)运行操作(不推荐使用)
  
-U SUDO_USER, --sudo-user=SUDO_USER   # sudo 用户,默认为root(不推荐使用)
  
-S, --su   # 使用su运行操作(不推荐使用)
  
-R SU_USER, --su-user=SU_USER   # su 用户,默认为root(不推荐使用)
  
-b, --become   # 运行操作(不暗示密码提示)
  
--become-method=BECOME_METHOD   # 权限升级方法使用,默认为sudo,有效选择:sudo 、su、pbrun、pfexec、doas、dzdo、ksu、runas、pmrun、enable
  
--become-user=BECOME_USER   # 使用哪个用户运行(默认为root)
  
--ask-su-pass   # 要求输入su密码(不推荐使用)
  
-K, --ask-become-pass   # 请求特权升级密码
  

2、ansible-playbook
  

[root@Ansible ~]# ansible-playbook -h  
Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
  

  相对于ansible,增加了下列选项:

  --flush-cache   # 清除fact缓存
  --syntax-check   # 语法检查
  --force-handlers   # 如果任务失败,也要运行handlers
  --list-tags   # 列出所有可用的标签
  --list-tasks   # 列出将要执行的所有任务
  --skip-tags=SKIP_TAGS   # 跳过运行标记此标签的任务
  --start-at-task=START_AT_TASK   # 在此任务处开始运行
  --step   # 一步一步:在运行之前确认每个任务
  -t TAGS, --tags=TAGS   # 只运行标记此标签的任务

  该指令对于需反复执行的、较为复杂的任务,我们可以通过定义 Playbook 来搞定。它允许使用变量、条件、循环、以及模板,也能通过角色及包含指令来重用既有内容。其通过读取playbook 文件后,执行相应的动作,这个后面会详细讲到。

3、ansible-doc
  

[root@Ansible ~]# ansible-doc -h  
Usage: ansible-doc [-l|-F|-s] [选项] [-t <插件类型> ] [插件]
  

  该指令用于查看模块信息,常用参数有两个-l 和 -s ,具体如下:
  

--# 列出所有已安装的模块  
[root@Ansible ~]# ansible-doc  -l
  

  
--# 查看具体某模块的用法,这里查看command模块
  
[root@Ansible ~]# ansible-doc -s command
  

4、ansible-pull
  

[root@Ansible ~]# ansible-pull -h  
Usage: ansible-pull -U <库> [选项] [<playbook.yml>]
  

  该指令使用需要谈到ansible的另一种模式---pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。

5、ansible-config
  

[root@Ansible ~]# ansible-config -h  
Usage: ansible-config [view|dump|list] [--help] [选项] [ansible.cfg]
  


  • view(查看):显示当前的配置文件
  • dump(转储):显示当前设置,合并ansible如果指定.cfg
  • list(列表)列出所有读取lib/constants.py的当前配置并显示env和config文件设置名称
  该指令是一个配置命令行类。查看、编辑、管理Ansible配置。

6、ansible-galaxy
  

[root@Ansible ~]# ansible-galaxy -h  
Usage: ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...
  

  ansible-galaxy 该指令用于共享和下载roles的工具,方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip或easy_install 。如下示例:
  

[root@Ansible ~]# ansible-galaxy install aeriscloud.docker  
- downloading role 'docker', owned by aeriscloud
  
- downloading role from https://github.com/AerisCloud/ansible-docker/archive/v1.2.1.tar.gz
  
- extracting aeriscloud.docker to /etc/ansible/roles/aeriscloud.docker
  
- aeriscloud.docker was installed successfully
  

  这个安装了一个aeriscloud.docker组件,前面aeriscloud是galaxy上创建该模块的用户名,后面对应的是其模块。在实际应用中也可以指定txt或yml 文件进行多个组件的下载安装。这部分可以参看官方文档。

7、ansible-vault
  

[root@Ansible ~]# ansible-vault -h  
Usage: ansible-vault [create|decrypt|edit|encrypt|encrypt_string|rekey|view] [options] [vaultfile.yml]
  

  该指令是一个文件加解密工具,应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 –ask-vault-pass参数,同样需要输入密码后才能正常执行。具体该部分可以参查官方博客。

8、ansible-inventory
  

[root@Ansible ~]# ansible-inventory -h  
Usage: ansible-inventory [options] [host|group]
  

  该指令用于在Ansible看到它时显示或转储配置的清单信息。

9、ansible-console
  

[root@Ansible ~]# ansible-console -h  
Usage: ansible-console [<host-pattern>] [options]
  

  该指令是一个REPL控制台允许执行Ansible任务(基于dominis’ansible-shell)。

10、ansible-connection
  该指令是一个连接类型,可以是 local、ssh 或 paramiko,ansible1.2 之前默认为 paramiko。
  Ansible官方文档:
  http://docs.ansible.com/ansible/latest/search.html?q=ansible-doc&check_keywords=yes&area=default
  以上就是Ansible常用的命令格式及参数,在接下来的学习中会逐步运用的。

三、Ad-Hoc

1、Ad-Hoc简介
  所谓 ad-hoc 命令是什么呢?
  这其实是一个概念性的名字,是相对于写 Ansible playbook 来说的。类似于在命令行敲入shell命令和写shell scripts两者之间的关系。
  如果我们敲入一些命令去比较快的完成一些事情,而不需要将这些执行的命令特别保存下来,这样的命令就叫做 ad-hoc 命令。
  Ansible提供两种方式去完成任务
  (1)ad-hoc命令
  执行shell命令,或shell脚本。可以执行一些简单的命令,不需要将这些执行的命令特别保存下来。适合执行简单的命令。
  (2)Ansible playbook
  可以解决比较复杂的任务,可以将命令保存下来。适合执行配置管理或部署客户机。
  Ad-Hoc是指Ansible下临时执行的一条命令,并且不需要保存的命令,对于复杂的命令会使用playbook。Ad-hoc的执行依赖于模块,Ansible官方提供了大量的模块。如:command、raw、shell、file、cron等,具体可以通过ansible-doc -l 进行查看。可以使用ansible-doc -s module来查看某个模块的参数,也可以使用ansible-doc help module来查看该模块更详细的信息。

2、Ad-Hoc用法
  接下来我们详细讲解该命令的用法:
  (1)命令说明
  

  
ansible [主机或组] -m [模块名] -a ['模块参数'] [ansible参数]
  

  主机和组,是在/etc/ansible/hosts 里进行指定的部分,当然动态Inventory 使用的是脚本从外部应用里获取的主机;
  模块名,可以通过ansible-doc -l 查看目前安装的模块,默认不指定时,使用的是command模块,具体可以查看/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,默认模块可以在该配置文件中进行修改;
  模块参数,可以通过 “ansible-doc -s 模块名” 查看具体的用法及后面的参数;
  ansible参数,可以通过ansible命令的帮助信息里查看到,这里有很多参数可以供选择,如是否需要输入密码、是否sudo等。
  (2)后台执行
  当命令执行时间比较长时,也可以放到后台执行,使用-B、-P参数,如下:
  

ansible all -B 3600 -a "/usr/bin/long_running_operation --do-stuff"     # 后台执行命令3600s,-B 表示后台执行的时间  
ansible all -m async_status -a "jid=123456789"    # 检查任务的状态
  
ansible all -B 1800 -P 60 -a "/usr/bin/long_running_operation --do-stuff"     # 后台执行命令最大时间是1800s即30分钟,-P 每60s检查下状态,默认15s
  

  (3)命令执行模块
  命令执行模块包含如下4个模块:


  • command模块:该模块通过-a跟上要执行的命令可以直接执行,不过命令里如果有带有如下字符部分则执行不成功 “  &quot;<&quot;, &quot;>&quot;, &quot;|&quot;,  &quot;&&quot; ;
  • shell 模块:用法基本和command一样,不过其是通过/bin/sh进行执行,所以shell 模块可以执行任何命令,就像在本机执行一样;
  • raw模块:用法和shell 模块一样 ,也可以执行任意命令,就像在本机执行一样;
  • script模块:其是将管理端的shell 在被管理主机上执行,其原理是先将shell 复制到远程主机,再在远程主机上执行,原理类似于raw模块。
  说明:raw模块和comand、shell 模块不同的是其没有chdir、creates、removes参数,chdir参数的作用就是先切到chdir指定的目录后,再执行后面的命令,这在后面很多模块里都会有该参数 。接下来会进行详细的介绍:
  command模块包含如下选项:


  • creates:创建一个文件名,当该文件存在,则该命令不执行
  • free_form:要执行的linux指令
  • chdir:在执行指令之前,先切换到该指定的目录
  • removes:一个文件名,当该文件不存在,则该选项不执行
  • executable:切换shell来执行指令,该执行路径必须是一个绝对路径
  例1 使用chdir的示例
  

[root@Ansible ~]# ansible 192.168.8.66 -m command -a 'chdir=/tmp touch test.txt'  
192.168.8.66 | SUCCESS | rc=0 >>
  
--# 结果显示:进入tmp目录然后创建test.txt文件
  

  
[root@Ansible ~]# ansible 192.168.8.66 -m shell -a 'chdir=/tmp touch test.txt'
  
192.168.8.66 | SUCCESS | rc=0 >>
  
--# 结果显示:进入tmp目录然后创建test.txt文件
  

  
[root@Ansible ~]# ansible 192.168.8.66 -m raw -a 'chdir=/tmp touch test.txt'
  
192.168.8.66 | SUCCESS | rc=0 >>
  
Shared connection to 192.168.8.66 closed.
  
--# 结果显示:进入当前执行用户的家目录然后创建test.txt文件
  

  说明:三个命令都会返回执行成功的状态。不过实际上只有前两个文件会被创建成功。使用raw模块执行的结果文件事实上也被正常创建了,不过不是在chdir指定的目录,而是在当前执行用户的家目录。
  例2 使用creates与removes示例
  

--# 当/tmp/test.txt文件存在时,则不执行who指令;则反之  
[root@Ansible ~]# ansible 192.168.8.66 -m command -a 'creates=/tmp/test.txt who'
  
192.168.8.66 | SUCCESS | rc=0 >>
  
skipped, since /tmp/test.txt exists
  

  
--# 当/tmp/test.txt文件存在时,则执行who指令;则反之
  
[root@Ansible ~]# ansible 192.168.8.66 -m command -a 'removes=/tmp/test.txt who'
  
192.168.8.66 | SUCCESS | rc=0 >>
  
root     tty1         2018-04-17 17:07
  
root     pts/0        2018-04-19 16:51 (192.168.8.1)
  
root     pts/1        2018-04-19 17:16 (192.168.8.55)
  

DSC0000.jpg

  例3 script模块实例
  首先在Ansible服务器上创建一个脚本并赋予可执行权限
  

[root@Ansible ~]# vim script.sh  
#/bin/bash
  
ifconfig ens33
  
df -h
  

  
[root@Ansible ~]# chmod +x script.sh
  
[root@Ansible ~]# ansible 192.168.8.66 -m script -a 'script.sh'
  
192.168.8.66 | SUCCESS => {
  "changed": true,
  "rc": 0,
  "stderr": "Shared connection to 192.168.8.66 closed.\r\n",
  
"stdout":
  
……
  "stdout_lines": [
  "ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500",
  "        inet 192.168.8.66  netmask 255.255.255.0  broadcast 192.168.8.255",
  ……
  "",
  "文件系统        容量  已用  可用 已用% 挂载点",
  "/dev/sda3        28G  1.7G   26G    7% /",
  "devtmpfs        983M     0  983M    0% /dev",
  "tmpfs           993M     0  993M    0% /dev/shm",
  "tmpfs           993M  8.7M  984M    1% /run",
  "tmpfs           993M     0  993M    0% /sys/fs/cgroup",
  "/dev/sda1       497M  109M  389M   22% /boot",
  "tmpfs           199M     0  199M    0% /run/user/0"
  ]
  
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-542602-1-1.html 上篇帖子: celery执行ansible任务时提示 "not attribute _config" 下篇帖子: 自动化运维工具Ansible入门教程变量与facts
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表