当前位置: 首页 > news >正文

使用playbook部署k8s集群

1.部署ansible集群
 

使用python脚本一个简单的搭建ansible集群-CSDN博客

2.ansible命令搭建k8s:


1.主机规划:

节点IP地址操作系统配置
server192.168.174.150centos7.92G2核
client1192.168.174.151centos7.92G2核
client2192.168.174.152centos7.92G2


ansible清单文件内容如下

[clients_all]
server
client1
client2
[clients_master]
server
[clients_client]
client1
client2

2.配置yum源

---
- hosts: clients_allgather_facts: novars:tasks:- name: 配置本地yum源block:- name: 挂载/dev/cdrommount:src: /dev/cdrompath: /mnt/cdromfstype: iso9660opts: defaultsstate: mounted- name: 删除\/dev\/cdrom行lineinfile:path: /etc/fstabregexp: '^\/dev\/cdrom'state: absent- name: 修改/etc/fstab配置文件lineinfile:path: /etc/fstabline: '/dev/cdrom /mnt/cdrom iso9660 defaults  0  0'insertafter: EOF- name: 创建文件并且清空文件shell: 'echo "" > /etc/yum.repos.d/centos-local.repo'- name: 修改配置文件centos-local.repoblockinfile:path: /etc/yum.repos.d/centos-local.repo# block: |表示将文本块的内容作为纯文本进行处理,不进行任何额外的格式化或处理block: |[centos7.9]name=centos7.9baseurl=file:///mnt/cdromenabled=1gpgcheck=0create: yesmarker: '#{mark} centos7.9'- name: 清理yum缓存,列出yum源列表shell: yum clean all && yum repolist- name: 配置远程阿里源block:- name: yum安装wgetyum:name: wget- name: 下载centosyum文件get_url:dest: /etc/yum.repos.d/CentOS-Base.repourl: http://mirrors.aliyun.com/repo/Centos-7.repo- name: 配置yum扩展源block:- name: yum安装epel-releaseyum:name: epel-release- name: 清理yum缓存,列出yum源列表shell: yum clean all && yum repolist

3.安装必要工具:

- hosts: clients_allgather_facts: novars:tasks:- name: 安装必要工具yum:name: bash-completion,vim,net-tools,tree,psmisc,lrzsz,dos2unix

4.禁止防火墙和selinux:

- hosts: clients_allgather_facts: novars:tasks:- name: 禁止使用selinuxselinux:state: disabled- name: 禁用firewalld服务service:name: firewalldstate: stoppedenabled: false- name: 禁用iptables服务service:name: iptablesstate: stoppedenabled: falseregister: service_statusignore_errors: True- name: 处理服务不存在的情况fail:msg: "服务不存在"when: service_status is failed

5.chrony时间同步

- hosts: clients_allgather_facts: novars:tasks:- name: 在所有节点使用yum安装chronyyum:name: chrony- name: 开机自启动,并重启chrony服务service:name: chronydstate: restartedenabled: true
- hosts: clients_mastergather_facts: novars:tasks:- name: 修改master节点chrony.confblock:- name: 修改同步IP地址范围lineinfile:path: /etc/chrony.confregexp: '^#allow 192.168.0.0\/16'line: 'allow 192.168.174.0/24'backrefs: yes- name: 修改同步层数lineinfile:path: /etc/chrony.confregexp: '^#local stratum 10'line: 'local stratum 10'backrefs: yes- name: 开机自启动,并重启chrony服务service:name: chronydstate: restartedenabled: true- name: 开启主节点时间同步shell: timedatectl set-ntp true
- hosts: clients_clientgather_facts: novars:tasks:- name: 修改master节点chrony.confblock:- name: 删除旧的时间同步服务器地址lineinfile:path: /etc/chrony.confregexp: '^server'state: absent- name: 添加新的时间同步服务器地址lineinfile:path: /etc/chrony.confline: 'server 192.168.174.150 iburst'insertbefore: '^.*\bline2\b.*$'- name: 开机自启动,并重启chrony服务service:name: chronydstate: restartedenabled: true- name: 开启主节点时间同步shell: timedatectl set-ntp true- name: 等待5秒shell: sleep 5- name: 查看同步状况shell: chronyc sources -v | sed -n '/^\^\*/p'register: command_output# 将打印的结果重定向到command_output,并输出到控制台- name: chronyc sources -v输出debug:var: command_output.stdout_lines

6.禁用swap分区,修改linux的内核参数,配置ipvs功能

- hosts: clients_allgather_facts: novars:tasks:- name: 禁用swap分区lineinfile:path: /etc/fstabregexp: '^\/dev\/mapper\/centos-swap'line: '#/dev/mapper/centos-swap swap                    swap    defaults        0 0'backrefs: yes- name: 修改linux的内核参数block:- name: 编辑/etc/sysctl.d/kubernetes.conf,添加网桥过滤和地址转发功能blockinfile:path: /etc/sysctl.d/kubernetes.confblock: |net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1create: yesmarker: '#{mark} kubernetes'- name: 重新加载配置shell: sysctl -p- name: 加载网桥过滤模块shell: modprobe br_netfilter- name: 查看网桥过滤模块是否加载成功shell: lsmod | grep br_netfilterregister: lsmod_output# 将打印的结果重定向到lsmod_output,并输出到控制台- name: lsmod | grep br_netfilter输出debug:var: lsmod_output.stdout_lines- name: 配置ipvs功能block:- name: 安装ipset和ipvsadmyum:name: ipset,ipvsadm- name: 添加需要加载的模块写入脚本文件blockinfile:path: /etc/sysconfig/modules/ipvs.modulesblock: |#! /bin/bashmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrack_ipv4create: yesmarker: '#{mark} ipvs'- name: 为脚本文件添加执行权限file:path: /etc/sysconfig/modules/ipvs.modulesmode: '0755'- name: 执行脚本文件script: /bin/bash /etc/sysconfig/modules/ipvs.modules- name: 查看对应的模块是否加载成功shell: lsmod | grep -e ip_vs -e nf_conntrack_ipv4register: lsmod_ipv4_output# 将打印的结果重定向到lsmod_output,并输出到控制台- name: lsmod | grep -e ip_vs -e nf_conntrack_ipv4输出debug:var: lsmod_ipv4_output.stdout_lines- name: 重启linux服务reboot:

7.安装Docker

- hosts: clients_allgather_facts: novars:tasks:- name: 修改linux的内核参数block:- name: 添加docker镜像到本地get_url:dest: /etc/yum.repos.d/docker-ce.repourl: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo- name: 然后输入命令shell: yum install -y --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7- name: 修改配置文件file:path: /etc/dockerstate: directory- name: 修改/etc/docker/daemon.jsonblockinfile:path: /etc/sysconfig/modules/ipvs.modulesblock: |{"storage-driver": "devicemapper","exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://ja9e22yz.mirror.aliyuncs.com"]}create: yesmarker: '#{mark} daemon'- name: 修改/etc/sysconfig/dockerblockinfile:path: /etc/sysconfig/dockerblock:OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'create: yesmarker: '#{mark} docker'- name: 重启docker服务,并设置开机自启service:name: dockerstate: restartedenabled: true

8.安装k8s组件

- hosts: clients_allgather_facts: novars:tasks:- name: 安装k8s组件block:- name: 配置k8syum仓库blockinfile:path: /etc/yum.repos.d/kubernetes.repoblock: |[kubernetes]name=Kubernetesbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgcreate: yesmarker: '#{mark} kubernetes'- name: 安装kubeadm、kubelet和kubectlshell: yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y- name: 编辑/etc/sysconfig/kubelet,配置kubelet的cgroupblockinfile:path: /etc/yum.repos.d/kubernetes.repoblock:KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"KUBE_PROXY_MODE="ipvs"create: yesmarker: '#{mark} kubernetes'- name: 设置kubelet开机自启service:name: kubeletstate: startedenabled: true

9.准备集群镜像

- hosts: clients_allgather_facts: novars:images:                 # 定义了一个镜像列表- kube-apiserver:v1.17.4- kube-controller-manager:v1.17.4- kube-scheduler:v1.17.4- kube-proxy:v1.17.4- pause:3.1- etcd:3.4.3-0- coredns:1.6.5tasks:- name: 拉取镜像shell: docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/{{ item }}with_items: "{{ images }}"          # 循环定义的列表- name: 给镜像打标签shell: docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/{{ item }} k8s.gcr.io/{{ item }}with_items: "{{ images }}"- name: 删除镜像shell: docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/{{ item }}with_items: "{{ images }}"

10.集群初始化

- hosts: clients_mastergather_facts: novars:- apiserver_address: 192.168.174.150tasks:- name: 在 master 节点,集群初始化block:- name: kubeadm initshell:kubeadm init \--kubernetes-version=v1.17.4 \--pod-network-cidr=10.244.0.0/16 \--service-cidr=10.96.0.0/12 \--apiserver-advertise-address={{ apiserver_address }} | \grep -Eo '(--token.*|--discovery-token-ca-cert-hash.*)' | awk -F ' ' '{print \$2}'# 将打印的结果重定向到lsmod_outputregister: kubeadm_init_output- name: 提取token和discovery-token-ca-cert-hash值set_fact:token: "{{ kubeadm_init_output.stdout_lines[0] }}"discovery_token_ca_cert_hash: "{{ kubeadm_init_output.stdout_lines[1] }}"- name: 将token和discovery_token_ca_cert_hash写入到文件中blockinfile:path: $HOME/kubeadm_init.yamlblock: |token: {{ token }}discovery_token_ca_cert_hash: {{ discovery_token_ca_cert_hash }}create: yesmarker: '#{mark} file'- name: 将token和discovery_token_ca_cert_hash的文件给ansible主机fetch:src: $HOME/kubeadm_init.yamldest: $HOME- name: kubeadm init输出debug:var: token,discovery_token_ca_cert_hash- name: 创建必要目录$HOME/.kubefile:path: $HOME/.kubestate: directory- name: 复制/etc/kubernetes/admin.confshell: cp -i /etc/kubernetes/admin.conf $HOME/.kube/config- name: 获取当前用户的id值shell: id -unregister: current_user- name: 获取当前用户组的id值shell: id -gnregister: current_group- name: 修改文件$HOME/.kube/config的所属主和组file:path: $HOME/.kube/configstate: touch# 这里register的值需要stdout方法,不然输出会加上[]owner: "{{ current_user.stdout }}"group: "{{ current_group.stdout }}"
# 在 node 节点,将node节点加入集群
- hosts: clients_clientvars:apiserver_address: 192.168.174.150vars_files: $HOME/server/root/kubeadm_init.yamltasks:- name: 在 node 节点,将node节点加入集群# 如果想获取到上一个项目中定义的fact变量需要开启gather_facts收集shell:kubeadm join {{ apiserver_address }}:6443 --token {{ token }} \--discovery-token-ca-cert-hash {{ discovery_token_ca_cert_hash }}
# 在 master 节点,在查看集群状态
- hosts: clients_mastergather_facts: novars:tasks:- name: 在 master 节点,在查看集群状态shell: kubectl get nodesregister: kubectl_nodes_output# 将打印的结果重定向到lsmod_output,并输出到控制台- name: kubectl get nodes输出debug:var: kubectl_nodes_output.stdout_lines

11.安装网络插件

- hosts: clients_mastergather_facts: novars:tasks:- name: 安装网络插件block:- name: 获取fannel的配置文件get_url:dest: $HOMEurl: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml- name: 部署flannel网络shell: kubectl apply -f $HOME/kube-flannel.yml && sleep 60- name: 过一分钟左右查看各节点状态,变为Ready说明网络打通了shell: kubectl get nodesregister: kubectl_nodes_output# 将打印的结果重定向到lsmod_output,并输出到控制台- name: kubectl get nodes输出debug:var: kubectl_nodes_output.stdout_lines- name: 查看所有pod是否变为Runningshell: kubectl get pod --all-namespacesregister: kubectl_pod_output# 将打印的结果重定向到lsmod_output,并输出到控制台- name: kubectl get pod --all-namespaces输出debug:var: kubectl_pod_output.stdout_lines

12.完整yaml文件:
 

# 1.配置yum源
---
- hosts: clients_allgather_facts: novars:tasks:- name: 配置本地yum源block:- name: 挂载/dev/cdrommount:src: /dev/cdrompath: /mnt/cdromfstype: iso9660opts: defaultsstate: mounted- name: 删除\/dev\/cdrom行lineinfile:path: /etc/fstabregexp: '^\/dev\/cdrom'state: absent- name: 修改/etc/fstab配置文件lineinfile:path: /etc/fstabline: '/dev/cdrom /mnt/cdrom iso9660 defaults  0  0'insertafter: EOF- name: 创建文件并且清空文件shell: 'echo "" > /etc/yum.repos.d/centos-local.repo'- name: 修改配置文件centos-local.repoblockinfile:path: /etc/yum.repos.d/centos-local.repo# block: |表示将文本块的内容作为纯文本进行处理,不进行任何额外的格式化或处理block: |[centos7.9]name=centos7.9baseurl=file:///mnt/cdromenabled=1gpgcheck=0create: yesmarker: '#{mark} centos7.9'- name: 清理yum缓存,列出yum源列表shell: yum clean all && yum repolist- name: 配置远程阿里源block:- name: yum安装wgetyum:name: wget- name: 下载centosyum文件get_url:dest: /etc/yum.repos.d/CentOS-Base.repourl: http://mirrors.aliyun.com/repo/Centos-7.repo- name: 配置yum扩展源block:- name: yum安装epel-releaseyum:name: epel-release- name: 清理yum缓存,列出yum源列表shell: yum clean all && yum repolist
# 2.安装必要工具:
- hosts: clients_allgather_facts: novars:tasks:- name: 安装必要工具yum:name: bash-completion,vim,net-tools,tree,psmisc,lrzsz,dos2unix
# 3.禁止防火墙和selinux:
- hosts: clients_allgather_facts: novars:tasks:- name: 禁止使用selinuxselinux:state: disabled- name: 禁用firewalld服务service:name: firewalldstate: stoppedenabled: false- name: 禁用iptables服务service:name: iptablesstate: stoppedenabled: falseregister: service_statusignore_errors: True- name: 处理服务不存在的情况fail:msg: "服务不存在"when: service_status is failed
# 4.chrony时间同步
- hosts: clients_allgather_facts: novars:tasks:- name: 在所有节点使用yum安装chronyyum:name: chrony- name: 开机自启动,并重启chrony服务service:name: chronydstate: restartedenabled: true
- hosts: clients_mastergather_facts: novars:tasks:- name: 修改master节点chrony.confblock:- name: 修改同步IP地址范围lineinfile:path: /etc/chrony.confregexp: '^#allow 192.168.0.0\/16'line: 'allow 192.168.174.0/24'backrefs: yes- name: 修改同步层数lineinfile:path: /etc/chrony.confregexp: '^#local stratum 10'line: 'local stratum 10'backrefs: yes- name: 开机自启动,并重启chrony服务service:name: chronydstate: restartedenabled: true- name: 开启主节点时间同步shell: timedatectl set-ntp true
- hosts: clients_clientgather_facts: novars:tasks:- name: 修改master节点chrony.confblock:- name: 删除旧的时间同步服务器地址lineinfile:path: /etc/chrony.confregexp: '^server'state: absent- name: 添加新的时间同步服务器地址lineinfile:path: /etc/chrony.confline: 'server 192.168.174.150 iburst'insertbefore: '^.*\bline2\b.*$'- name: 开机自启动,并重启chrony服务service:name: chronydstate: restartedenabled: true- name: 开启主节点时间同步shell: timedatectl set-ntp true- name: 等待5秒shell: sleep 5- name: 查看同步状况shell: chronyc sources -v | sed -n '/^\^\*/p'register: command_output# 将打印的结果重定向到command_output,并输出到控制台- name: chronyc sources -v输出debug:var: command_output.stdout_lines
# 5.禁用swap分区,修改linux的内核参数,配置ipvs功能
- hosts: clients_allgather_facts: novars:tasks:- name: 禁用swap分区lineinfile:path: /etc/fstabregexp: '^\/dev\/mapper\/centos-swap'line: '#/dev/mapper/centos-swap swap                    swap    defaults        0 0'backrefs: yes- name: 修改linux的内核参数block:- name: 编辑/etc/sysctl.d/kubernetes.conf,添加网桥过滤和地址转发功能blockinfile:path: /etc/sysctl.d/kubernetes.confblock: |net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1create: yesmarker: '#{mark} kubernetes'- name: 重新加载配置shell: sysctl -p- name: 加载网桥过滤模块shell: modprobe br_netfilter- name: 查看网桥过滤模块是否加载成功shell: lsmod | grep br_netfilterregister: lsmod_output# 将打印的结果重定向到lsmod_output,并输出到控制台- name: lsmod | grep br_netfilter输出debug:var: lsmod_output.stdout_lines- name: 配置ipvs功能block:- name: 安装ipset和ipvsadmyum:name: ipset,ipvsadm- name: 添加需要加载的模块写入脚本文件blockinfile:path: /etc/sysconfig/modules/ipvs.modulesblock: |#! /bin/bashmodprobe -- ip_vsmodprobe -- ip_vs_rrmodprobe -- ip_vs_wrrmodprobe -- ip_vs_shmodprobe -- nf_conntrack_ipv4create: yesmarker: '#{mark} ipvs'- name: 为脚本文件添加执行权限file:path: /etc/sysconfig/modules/ipvs.modulesmode: '0755'- name: 执行脚本文件script: /bin/bash /etc/sysconfig/modules/ipvs.modules- name: 查看对应的模块是否加载成功shell: lsmod | grep -e ip_vs -e nf_conntrack_ipv4register: lsmod_ipv4_output# 将打印的结果重定向到lsmod_output,并输出到控制台- name: lsmod | grep -e ip_vs -e nf_conntrack_ipv4输出debug:var: lsmod_ipv4_output.stdout_lines
#        - name: 重启linux服务
#          reboot:
# 6.安装Docker
- hosts: clients_allgather_facts: novars:tasks:- name: 修改linux的内核参数block:- name: 添加docker镜像到本地get_url:dest: /etc/yum.repos.d/docker-ce.repourl: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo- name: 然后输入命令shell: yum install -y --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7- name: 修改配置文件file:path: /etc/dockerstate: directory- name: 修改/etc/docker/daemon.jsonblockinfile:path: /etc/sysconfig/modules/ipvs.modulesblock: |{"storage-driver": "devicemapper","exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://ja9e22yz.mirror.aliyuncs.com"]}create: yesmarker: '#{mark} daemon'- name: 修改/etc/sysconfig/dockerblockinfile:path: /etc/sysconfig/dockerblock:OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'create: yesmarker: '#{mark} docker'- name: 重启docker服务,并设置开机自启service:name: dockerstate: restartedenabled: true
# 7.安装k8s组件
- hosts: clients_allgather_facts: novars:tasks:- name: 安装k8s组件block:- name: 配置k8syum仓库blockinfile:path: /etc/yum.repos.d/kubernetes.repoblock: |[kubernetes]name=Kubernetesbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgcreate: yesmarker: '#{mark} kubernetes'- name: 安装kubeadm、kubelet和kubectlshell: yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y- name: 编辑/etc/sysconfig/kubelet,配置kubelet的cgroupblockinfile:path: /etc/yum.repos.d/kubernetes.repoblock:KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"KUBE_PROXY_MODE="ipvs"create: yesmarker: '#{mark} kubernetes'- name: 设置kubelet开机自启service:name: kubeletstate: startedenabled: true
# 8.准备集群镜像
- hosts: clients_allgather_facts: novars:images:                 # 定义了一个镜像列表- kube-apiserver:v1.17.4- kube-controller-manager:v1.17.4- kube-scheduler:v1.17.4- kube-proxy:v1.17.4- pause:3.1- etcd:3.4.3-0- coredns:1.6.5tasks:- name: 拉取镜像shell: docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/{{ item }}with_items: "{{ images }}"          # 循环定义的列表- name: 给镜像打标签shell: docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/{{ item }} k8s.gcr.io/{{ item }}with_items: "{{ images }}"- name: 删除镜像shell: docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/{{ item }}with_items: "{{ images }}"
# 9.集群初始化
- hosts: clients_mastergather_facts: novars:- apiserver_address: 192.168.174.150tasks:- name: 在 master 节点,集群初始化block:- name: kubeadm initshell:kubeadm init \--kubernetes-version=v1.17.4 \--pod-network-cidr=10.244.0.0/16 \--service-cidr=10.96.0.0/12 \--apiserver-advertise-address={{ apiserver_address }} | \grep -Eo '(--token.*|--discovery-token-ca-cert-hash.*)' | awk -F ' ' '{print \$2}'# 将打印的结果重定向到lsmod_outputregister: kubeadm_init_output- name: 提取token和discovery-token-ca-cert-hash值set_fact:token: "{{ kubeadm_init_output.stdout_lines[0] }}"discovery_token_ca_cert_hash: "{{ kubeadm_init_output.stdout_lines[1] }}"- name: 将token和discovery_token_ca_cert_hash写入到文件中blockinfile:path: $HOME/kubeadm_init.yamlblock: |token: {{ token }}discovery_token_ca_cert_hash: {{ discovery_token_ca_cert_hash }}create: yesmarker: '#{mark} file'- name: 将token和discovery_token_ca_cert_hash的文件给ansible主机fetch:src: $HOME/kubeadm_init.yamldest: $HOME- name: kubeadm init输出debug:var: token,discovery_token_ca_cert_hash- name: 创建必要目录$HOME/.kubefile:path: $HOME/.kubestate: directory- name: 复制/etc/kubernetes/admin.confshell: cp -i /etc/kubernetes/admin.conf $HOME/.kube/config- name: 获取当前用户的id值shell: id -unregister: current_user- name: 获取当前用户组的id值shell: id -gnregister: current_group- name: 修改文件$HOME/.kube/config的所属主和组file:path: $HOME/.kube/configstate: touch# 这里register的值需要stdout方法,不然输出会加上[]owner: "{{ current_user.stdout }}"group: "{{ current_group.stdout }}"
# 在 node 节点,将node节点加入集群
- hosts: clients_clientvars:apiserver_address: 192.168.174.150vars_files: $HOME/server/root/kubeadm_init.yamltasks:- name: 在 node 节点,将node节点加入集群# 如果想获取到上一个项目中定义的fact变量需要开启gather_facts收集shell:kubeadm join {{ apiserver_address }}:6443 --token {{ token }} \--discovery-token-ca-cert-hash {{ discovery_token_ca_cert_hash }}
# 在 master 节点,在查看集群状态
- hosts: clients_mastergather_facts: novars:tasks:- name: 在 master 节点,在查看集群状态shell: kubectl get nodesregister: kubectl_nodes_output# 将打印的结果重定向到lsmod_output,并输出到控制台- name: kubectl get nodes输出debug:var: kubectl_nodes_output.stdout_lines
# 9.安装网络插件
- hosts: clients_mastergather_facts: novars:tasks:- name: 安装网络插件block:- name: 获取fannel的配置文件get_url:dest: $HOMEurl: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml- name: 部署flannel网络shell: kubectl apply -f $HOME/kube-flannel.yml && sleep 60- name: 过一分钟左右查看各节点状态,变为Ready说明网络打通了shell: kubectl get nodesregister: kubectl_nodes_output# 将打印的结果重定向到lsmod_output,并输出到控制台- name: kubectl get nodes输出debug:var: kubectl_nodes_output.stdout_lines- name: 查看所有pod是否变为Runningshell: kubectl get pod --all-namespacesregister: kubectl_pod_output# 将打印的结果重定向到lsmod_output,并输出到控制台- name: kubectl get pod --all-namespaces输出debug:var: kubectl_pod_output.stdout_lines

相关文章:

使用playbook部署k8s集群

1.部署ansible集群 使用python脚本一个简单的搭建ansible集群-CSDN博客 2.ansible命令搭建k8s: 1.主机规划: 节点IP地址操作系统配置server192.168.174.150centos7.92G2核client1192.168.174.151centos7.92G2核client2192.168.174.152centos7.92G2 …...

Python基础入门第四节,第五节课笔记

第四节 第一个条件语句 if 条件: 条件成立执行的代码1 条件成立执行的代码2 ...... else: 条件不成立执行的代码1 条件不成立执行的代码2 …… 代码如下: 身高 float(input("请输入您的身高(米):")) if 身高 >1.3:print(f您的身高是{身高},已经超过1.3米,您需…...

基于Java SSM框架实现智能停车场系统项目【项目源码+论文说明】

基于java的SSM框架实现智能停车场系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个智能停车场管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述…...

React系列:useEffect的使用

useEffect的使用 useEffect的第二个参数不同,useEffect的加载不同 当第二个参数为没有的时候 只在组件初始渲染和组件更新之后加载当第二个参数为[] 的时候 只在初始渲染之后加载当第二个参数为[有依赖] 的时候 只在初始渲染之后和依赖修改的时候进行加载 functi…...

Ps:形状工具 - 描边选项

在形状工具的工具选项栏或“属性”面板中,单击“设置形状描边类型” Set shape stroke type菜单图标可打开“描边选项” Stroke Options面板。 描边预设 Stroke Type 默认列出了实线、虚线和点线三种类型的描边,单击可应用。 自己创建并存储的描边类型&a…...

C#基础知识 - 变量、常量与数据类型篇

C#基础知识 - 变量、常量与数据类型篇 第3节 变量、常量与数据类型3.1 C#变量3.1.1 变量使用3.1.2 自定义变量3.1.2 接收用户输入 3.2 C#常量3.2.1 常量的使用 3.3 C#数据类型3.3.1 数据类型之值类型3.3.2 数据类型之引用类型 更多C#基础知识详解请查看:C#基础知识 …...

Java面向对象思想以及原理以及内存图解

文章目录 什么是面向对象面向对象和面向过程区别创建一个对象用什么运算符?面向对象实现伪代码面向对象三大特征类和对象的关系。 基础案例代码实现实例化创建car对象时car引用的内存图对象调用方法过程 成员变量和局部变量作用范围在内存中的位置 关于对象的引用关系简介相关…...

Gitbook----基于 Windows 10 系统本地安装配置 Gitbook 编写属于自己的电子书

查看原文 文章目录 一、安装 Nodejs二、安装 Gitbook三、gitbook 的使用方法四、设计电子书的目录结构五、设置 gitbook 常用配置 一、安装 Nodejs 若要在 Windows 10 系统即本地使用 Gitbook,需要安装 gitlab-cli 工具,而 gitbook-cli 工具是基于 Node…...

springMVC-Restful风格

基本介绍 REST:即Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用. 1.HTTP协议里面,四个表示操…...

【OS】操作系统总复习笔记

操作系统总复习 文章目录 操作系统总复习一、考试题型1. 论述分析题2. 计算题3. 应用题 二、操作系统引论(第1章)2.1 操作系统的发展过程2.2 操作系统定义2.3 操作系统的基本特性2.3.1 并发2.3.2 共享2.3.3 虚拟2.3.4 异步 2.4 OS的功能2.5 OS结构2.5 习…...

powerbuilder游标的使⽤

在某些PowerBuilder应⽤程序的开发中,您可能根本⽤不到游标这样⼀个对象。因为在其它⼯具开发中很多需⽤游标实现的⼯作,在PowerBuilder中却已有DataWin-dow来代劳了。事实上,DataWindow不仅可以替代游标进⾏从后台数据库查询多条记录的复杂操作,⽽且还远不⽌这些。但是同DataW…...

docker创建镜像 Dockerfile

目录 docker的创建镜像的方式 dockerfile形成(原理) docker的核心作用 docker的文件结构 dockerfile的语法 CMD和ENTRPOINT的区别 创建dockerfile镜像 区别 RUN命令的优化 如何把run命令写在一块 copy和ADD区别 区别 centos7 构建Apache的d…...

C++共享和保护——(2)生存期

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 生命如同寓言,其价值不在于…...

你好,C++(3)2.1 一个C++程序的自白

第2部分 与C第一次亲密接触 在浏览了C“三分天下”的世界版图之后,便对C有了基本的了解,算是一只脚跨入了C世界的大门。那么,怎样将我们的另外一只脚也跨入C世界的大门呢?是该即刻开始编写C程序?还是…… 正在我们犹…...

【INTEL(ALTERA)】Agilex7 FPGA Development Kit DK-DEV-AGI027R1BES编程/烧录/烧写/下载步骤

DK-DEV-AGI027R1BES 的编程步骤: 将外部 USB Blaster II 连接到 J10- 外部 JTAG 接头。将交换机 SW5.3 设置为 ON(首次)。打开 英特尔 Quartus Prime Pro Edition 软件编程工具。单击 硬件设置 ,然后选择 USB Blaster II。将硬件…...

大文件分块上传的代码,C++转delphi,由delphi实现。

在 Delphi 中,我们通常使用 IdHTTP 或 TNetHTTPClient 等组件来处理 HTTP 请求 原文章链接: 掌握分片上传:优化大文件传输的关键策略 【C】【WinHttp】【curl】-CSDN博客 改造思路: 文件分块处理:使用 TFileStream 来…...

MongoDB表的主键可以重复?!MongoDB的坑

MongoDB表的主键可以重复?! 眼见为实? 碰到一个奇怪的现象, MongoDB的一个表居然有两个一样的_id值! 再次提交时,是会报主键冲突的。那上图,为什么会有两个一样的_id呢? 将它们的…...

C++初阶-list类的模拟实现

list类的模拟实现 一、基本框架1.1 节点类1.2 迭代器类1.3 list类 二、构造函数和析构函数2.1 构造函数2.2 析构函数 三、operator的重载和拷贝构造3.1 operator的重载3.2 拷贝构造 四、迭代器的实现4.1 迭代器类中的各种操作4.1 list类中的迭代器 五、list的增容和删除5.1 尾插…...

RecyclerView中的设计模式解读

一.观察者模式:(待完善,这个写的不咋地,没理解透彻) 1.观察者模式的概念: (1)消息传递方向:被观察者->观察者 (2)代码实现: 首…...

ACwing算法备战蓝桥杯——Day30——树状数组

定义: 树状数组是一种数据结构,能将对一个区间内数据进行修改和求前缀和的这两种操作的最坏时间复杂度降低到O(logn); 实现所需变量 变量名变量数据类型作用数组a[]int存储一段区间数组tr[]int表示树状数组 主要操作 函数名函数参数组要作用lowbit()int…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"&#xff0…...

爬虫基础学习day2

# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...