|
| 1 | +# 每个 node 节点运行 haproxy 连接到多个 apiserver |
| 2 | +- import_tasks: node_lb.yml |
| 3 | + when: "inventory_hostname not in groups['kube-master']" |
| 4 | + |
| 5 | +- name: 替换 kubeconfig 的 apiserver 地址 |
| 6 | + lineinfile: |
| 7 | + dest: /root/.kube/config |
| 8 | + regexp: "^ server" |
| 9 | + line: " server: https://127.0.0.1:6443" |
| 10 | + when: "inventory_hostname not in groups['kube-master']" |
| 11 | + |
1 | 12 | # 创建kubelet,kube-proxy工作目录和cni配置目录
|
2 | 13 | - name: 创建kube-node 相关目录
|
3 | 14 | file: name={{ item }} state=directory
|
4 | 15 | with_items:
|
5 | 16 | - /var/lib/kubelet
|
6 | 17 | - /var/lib/kube-proxy
|
7 | 18 | - /etc/cni/net.d
|
8 |
| - - /root/.kube |
9 | 19 |
|
10 | 20 | - name: 下载 kubelet,kube-proxy 二进制和基础 cni plugins
|
11 | 21 | copy: src={{ base_dir }}/bin/{{ item }} dest={{ bin_dir }}/{{ item }} mode=0755
|
|
18 | 28 | - loopback
|
19 | 29 | tags: upgrade_k8s
|
20 | 30 |
|
21 |
| -- name: 分发 kubeconfig配置文件 |
22 |
| - synchronize: src=/root/.kube/config dest=/root/.kube/config |
23 |
| - delegate_to: "{{ groups.deploy[0] }}" |
24 |
| - |
25 |
| -- name: 添加 kubectl 命令自动补全 |
26 |
| - lineinfile: |
27 |
| - dest: ~/.bashrc |
28 |
| - state: present |
29 |
| - regexp: 'kubectl completion' |
30 |
| - line: 'source <(kubectl completion bash)' |
31 |
| - |
32 |
| -- name: ansible 控制端添加 kubectl 自动补全 |
33 |
| - lineinfile: |
34 |
| - dest: ~/.bashrc |
35 |
| - state: present |
36 |
| - regexp: 'kubectl completion' |
37 |
| - line: 'source <(kubectl completion bash)' |
38 |
| - connection: local |
39 |
| - run_once: true |
40 |
| - ignore_errors: true |
41 |
| - |
42 |
| -- name: 分发证书相关 |
43 |
| - synchronize: src={{ ca_dir }}/{{ item }} dest={{ ca_dir }}/{{ item }} |
44 |
| - with_items: |
45 |
| - - ca.pem |
46 |
| - - ca-key.pem |
47 |
| - - ca-config.json |
48 |
| - delegate_to: "{{ groups.deploy[0] }}" |
49 |
| - |
50 | 31 | ##----------kubelet 配置部分--------------
|
| 32 | + |
51 | 33 | - name: 准备kubelet 证书签名请求
|
52 | 34 | template: src=kubelet-csr.json.j2 dest={{ ca_dir }}/kubelet-csr.json
|
53 | 35 |
|
|
63 | 45 | shell: "{{ bin_dir }}/kubectl config set-cluster kubernetes \
|
64 | 46 | --certificate-authority={{ ca_dir }}/ca.pem \
|
65 | 47 | --embed-certs=true \
|
66 |
| - --server={{ KUBE_APISERVER }} \ |
67 |
| - --kubeconfig=kubelet.kubeconfig" |
| 48 | + --server=https://127.0.0.1:6443 \ |
| 49 | + --kubeconfig=/etc/kubernetes/kubelet.kubeconfig" |
| 50 | + when: "inventory_hostname not in groups['kube-master']" |
| 51 | + |
| 52 | +- name: 设置集群参数 |
| 53 | + shell: "{{ bin_dir }}/kubectl config set-cluster kubernetes \ |
| 54 | + --certificate-authority={{ ca_dir }}/ca.pem \ |
| 55 | + --embed-certs=true \ |
| 56 | + --server=https://{{ inventory_hostname }}:6443 \ |
| 57 | + --kubeconfig=/etc/kubernetes/kubelet.kubeconfig" |
| 58 | + when: "inventory_hostname in groups['kube-master']" |
68 | 59 |
|
69 | 60 | - name: 设置客户端认证参数
|
70 | 61 | shell: "{{ bin_dir }}/kubectl config set-credentials system:node:{{ inventory_hostname }} \
|
71 | 62 | --client-certificate={{ ca_dir }}/kubelet.pem \
|
72 | 63 | --embed-certs=true \
|
73 | 64 | --client-key={{ ca_dir }}/kubelet-key.pem \
|
74 |
| - --kubeconfig=kubelet.kubeconfig" |
| 65 | + --kubeconfig=/etc/kubernetes/kubelet.kubeconfig" |
75 | 66 |
|
76 | 67 | - name: 设置上下文参数
|
77 | 68 | shell: "{{ bin_dir }}/kubectl config set-context default \
|
78 | 69 | --cluster=kubernetes \
|
79 | 70 | --user=system:node:{{ inventory_hostname }} \
|
80 |
| - --kubeconfig=kubelet.kubeconfig" |
| 71 | + --kubeconfig=/etc/kubernetes/kubelet.kubeconfig" |
81 | 72 |
|
82 | 73 | - name: 选择默认上下文
|
83 | 74 | shell: "{{ bin_dir }}/kubectl config use-context default \
|
84 |
| - --kubeconfig=kubelet.kubeconfig" |
85 |
| - |
86 |
| -- name: 移动 kubelet.kubeconfig |
87 |
| - shell: "mv /root/kubelet.kubeconfig /etc/kubernetes/" |
| 75 | + --kubeconfig=/etc/kubernetes/kubelet.kubeconfig" |
88 | 76 |
|
89 | 77 | - name: 准备 cni配置文件
|
90 | 78 | template: src=cni-default.conf.j2 dest=/etc/cni/net.d/10-default.conf
|
|
102 | 90 | tags: upgrade_k8s, restart_node
|
103 | 91 |
|
104 | 92 | ##-------kube-proxy部分----------------
|
105 |
| -- name: 安装kube-proxy.kubeconfig配置文件 |
106 |
| - synchronize: src=/etc/kubernetes/kube-proxy.kubeconfig dest=/etc/kubernetes/kube-proxy.kubeconfig |
107 |
| - delegate_to: "{{ groups.deploy[0] }}" |
| 93 | + |
| 94 | +- name: 替换 kube-proxy.kubeconfig 的 apiserver 地址 |
| 95 | + lineinfile: |
| 96 | + dest: /etc/kubernetes/kube-proxy.kubeconfig |
| 97 | + regexp: "^ server" |
| 98 | + line: " server: https://127.0.0.1:6443" |
| 99 | + when: "inventory_hostname not in groups['kube-master']" |
| 100 | + |
| 101 | +- name: 替换 kube-proxy.kubeconfig 的 apiserver 地址 |
| 102 | + lineinfile: |
| 103 | + dest: /etc/kubernetes/kube-proxy.kubeconfig |
| 104 | + regexp: "^ server" |
| 105 | + line: " server: https://{{ inventory_hostname }}:6443" |
| 106 | + when: "inventory_hostname in groups['kube-master']" |
108 | 107 |
|
109 | 108 | - name: 创建kube-proxy 服务文件
|
110 | 109 | tags: reload-kube-proxy, upgrade_k8s, restart_node
|
|
118 | 117 | shell: systemctl daemon-reload && systemctl restart kube-proxy
|
119 | 118 | tags: reload-kube-proxy, upgrade_k8s, restart_node
|
120 | 119 |
|
121 |
| -# 批准 node 节点,首先轮询等待kubelet启动完成 |
| 120 | +# 轮询等待kubelet启动完成 |
122 | 121 | - name: 轮询等待kubelet启动
|
123 | 122 | shell: "systemctl status kubelet.service|grep Active"
|
124 | 123 | register: kubelet_status
|
125 | 124 | until: '"running" in kubelet_status.stdout'
|
126 | 125 | retries: 8
|
127 | 126 | delay: 2
|
128 | 127 |
|
129 |
| -#- name: 获取csr 请求信息 |
130 |
| -# shell: "sleep 3 && {{ bin_dir }}/kubectl get csr" |
131 |
| -# delegate_to: "{{ groups.deploy[0] }}" |
132 |
| -# register: csr_info |
133 |
| -# run_once: true |
134 |
| - |
135 |
| -#- name: approve-kubelet-csr |
136 |
| -# shell: "{{ bin_dir }}/kubectl get csr|grep 'Pending' | awk 'NR>0{print $1}'| \ |
137 |
| -# xargs {{ bin_dir }}/kubectl certificate approve" |
138 |
| -# when: '"Pending" in csr_info.stdout' |
139 |
| -# delegate_to: "{{ groups.deploy[0] }}" |
140 |
| -# run_once: true |
141 |
| - |
142 | 128 | - name: 轮询等待node达到Ready状态
|
143 | 129 | shell: "{{ bin_dir }}/kubectl get node {{ inventory_hostname }}|awk 'NR>1{print $2}'"
|
144 | 130 | register: node_status
|
145 |
| - delegate_to: "{{ groups.deploy[0] }}" |
146 | 131 | until: node_status.stdout == "Ready" or node_status.stdout == "Ready,SchedulingDisabled"
|
147 | 132 | retries: 8
|
148 | 133 | delay: 8
|
|
151 | 136 | - name: 设置node节点role
|
152 | 137 | shell: "{{ bin_dir }}/kubectl label node {{ inventory_hostname }} kubernetes.io/role=node --overwrite"
|
153 | 138 | ignore_errors: true
|
154 |
| - delegate_to: "{{ groups.deploy[0] }}" |
0 commit comments