Skip to content

Commit 8069cd2

Browse files
committed
[vi] add Vietnamese translation for Setup HA etcd with kubeadm
1 parent f6538e5 commit 8069cd2

File tree

3 files changed

+349
-0
lines changed

3 files changed

+349
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
title: Cài đặt Kubernetes với các công cụ triển khai
3+
weight: 30
4+
no_list: true
5+
---
6+
7+
Có nhiều phương pháp và công cụ cho việc cài đặt cụm Kubernetes production của bạn.
8+
Ví dụ:
9+
10+
- [kubeadm](/docs/setup/production-environment/tools/kubeadm/)
11+
12+
- [Cluster API](https://cluster-api.sigs.k8s.io/): Một dự án con Kubernetes tập trung vào
13+
việc cung cấp API và công cụ khai báo để đơn giản hóa việc cung cấp, nâng cấp và
14+
vận hành nhiều cụm Kubernetes.
15+
16+
- [kops](https://kops.sigs.k8s.io/): Một công cụ cung cấp cụm tự động.
17+
Đối với các hướng dẫn, thực hành tốt nhất, tùy chọn cấu hình và thông tin về
18+
tiếp cận với cộng đồng, vui lòng kiểm tra
19+
[`kOps` website](https://kops.sigs.k8s.io/) để biết chi tiết.
20+
21+
- [kubespray](https://kubespray.io/):
22+
Một sự phối hợp của [Ansible](https://docs.ansible.com/) playbooks,
23+
[inventory](https://github.com/kubernetes-sigs/kubespray/blob/master/docs/ansible/inventory.md),
24+
các công cụ cung cấp, và kiến ​​thức chuyên môn cho các tác vụ quản lý cấu hình
25+
Hệ điều hành/cụm Kubernetes chung. Bạn có thể tiếp cận tới cộng đồng trên kênh Slack
26+
[#kubespray](https://kubernetes.slack.com/messages/kubespray/).
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
title: "Khởi tạo cụm với kubeadm"
3+
weight: 10
4+
---
Lines changed: 319 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,319 @@
1+
---
2+
reviewers:
3+
- sig-cluster-lifecycle
4+
title: Thiết lập một cụm etcd có tính Sẵn sàng cao (High Availability) với kubeadm
5+
content_type: task
6+
weight: 70
7+
---
8+
9+
<!-- overview -->
10+
11+
12+
Mặc định, kubeadm chạy một instance etcd cục bộ trên từng node control plane.
13+
Bạn cũng có thể thiết lập cụm etcd bên ngoài và cung cấp các etcd instance trên
14+
các máy chủ riêng biệt. Những sự khác biệt giữa hai cách tiếp cận này được trình bày
15+
trong trang
16+
[Các tùy chọn cho kiến trúc có tính Sẵn sàng cao](/docs/setup/production-environment/tools/kubeadm/ha-topology).
17+
18+
Tác vụ này hướng dẫn quy trình tạo một cụm etcd bên ngoài có tính sẵn sàng cao gồm
19+
ba member mà kubeadm có thể sử dụng trong quá trình tạo cụm.
20+
21+
## {{% heading "prerequisites" %}}
22+
23+
- Ba máy chủ có thể giao tiếp với nhau qua cổng TCP 2379 và 2380.
24+
Tài liệu này giả định các cổng mặc định này. Tuy nhiên, chúng có thể được cấu hình
25+
thông qua tệp cấu hình kubeadm.
26+
- Mỗi máy chủ phải có systemd và đã cài đặt một shell tương thích với bash.
27+
- Mỗi máy chủ phải
28+
[đã cài đặt một container runtime, kubelet, và kubeadm](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/).
29+
- Mỗi máy chủ phải có quyền truy cập vào Kubernetes container image registry (`registry.k8s.io`)
30+
hoặc list/pull image etcd cần thiết bằng lệnh `kubeadm config images list/pull`. Hướng dẫn này
31+
sẽ cài đặt các etcd instance dạng
32+
[static pods](/docs/tasks/configure-pod-container/static-pod/) được quản lý bởi kubelet.
33+
- Một số công cụ để sao chép các file giữa các máy chủ. Ví dụ `ssh``scp`
34+
có thể đáp ứng yêu cầu này.
35+
36+
<!-- steps -->
37+
38+
## Thiết lập cụm
39+
40+
Cách tiếp cận thông thường là tạo ra toàn bộ chứng chỉ trên một node và chỉ phân bổ
41+
những file _quan trọng_ tới các node khác.
42+
43+
{{< note >}}
44+
kubeadm chứa tất cả các công cụ mã hóa cần thiết để tạo ra
45+
các chứng chỉ được đề cập bên dưới; không cần các công cụ mã hóa nào khác cho ví dụ này.
46+
{{< /note >}}
47+
48+
{{< note >}}
49+
Ví dụ bên dưới sử dụng dịa chỉ IPv4 nhưng bạn cũng có thể cấu hình kubeadm, kubelet và etcd
50+
sử dụng địa chỉ IPv6. Dual-stack được hỗ trợ bởi một vài tùy chọn của Kubernetes, nhưng
51+
không được etcd hỗ trợ. Xem thêm chi tiết về Kubernetes hỗ trợ dual-stack tại
52+
[Hỗ trợ Dual-stack với kubeadm](/docs/setup/production-environment/tools/kubeadm/dual-stack-support/).
53+
{{< /note >}}
54+
55+
1. Cấu hình kubelet để trở thành trình quản lý dịch vụ cho etcd.
56+
57+
{{< note >}}Bạn phải thực hiện điều này trên toàn bộ các máy chủ chạy etcd.{{< /note >}}
58+
Vì etcd sẽ được tạo ra trước tiên, bạn phải ghi đè độ ưu tiên dịch vụ bằng cách tạo ra một
59+
unit file mới có độ ưu tiên cao hơn kubelet unit file mà kubeadm cung cấp.
60+
61+
```sh
62+
cat << EOF > /etc/systemd/system/kubelet.service.d/kubelet.conf
63+
# Thay thế "systemd" bằng giá trị cgroup driver của container runtime của bạn. Giá trị mặc định trong kubelet là "cgroupfs".
64+
# Thay thế giá trị của "containerRuntimeEndpoint" bằng một container runtime khác nếu cần.
65+
#
66+
apiVersion: kubelet.config.k8s.io/v1beta1
67+
kind: KubeletConfiguration
68+
authentication:
69+
anonymous:
70+
enabled: false
71+
webhook:
72+
enabled: false
73+
authorization:
74+
mode: AlwaysAllow
75+
cgroupDriver: systemd
76+
address: 127.0.0.1
77+
containerRuntimeEndpoint: unix:///var/run/containerd/containerd.sock
78+
staticPodPath: /etc/kubernetes/manifests
79+
EOF
80+
81+
cat << EOF > /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf
82+
[Service]
83+
ExecStart=
84+
ExecStart=/usr/bin/kubelet --config=/etc/systemd/system/kubelet.service.d/kubelet.conf
85+
Restart=always
86+
EOF
87+
88+
systemctl daemon-reload
89+
systemctl restart kubelet
90+
```
91+
92+
Kiểm tra trạng thái kubelet để chắc chắn rằng nó đang chạy.
93+
94+
```sh
95+
systemctl status kubelet
96+
```
97+
98+
1. Tạo các file cấu hình cho kubeadm.
99+
100+
Tạo một file cấu hình kubeadm cho từng máy chủ mà có etcd member chạy trên đó
101+
sử dụng tập lệnh dưới đây.
102+
103+
```sh
104+
# Thay đổi HOST0, HOST1 và HOST2 với các IP của các máy của bạn
105+
export HOST0=10.0.0.6
106+
export HOST1=10.0.0.7
107+
export HOST2=10.0.0.8
108+
109+
# Thay đổi NAME0, NAME1 và NAME2 bằng hostnames của các máy của bạn
110+
export NAME0="infra0"
111+
export NAME1="infra1"
112+
export NAME2="infra2"
113+
114+
# Tạo các thư mục tạm thời để lưu các file sẽ xuất hỉện trên các máy khác
115+
mkdir -p /tmp/${HOST0}/ /tmp/${HOST1}/ /tmp/${HOST2}/
116+
117+
HOSTS=(${HOST0} ${HOST1} ${HOST2})
118+
NAMES=(${NAME0} ${NAME1} ${NAME2})
119+
120+
for i in "${!HOSTS[@]}"; do
121+
HOST=${HOSTS[$i]}
122+
NAME=${NAMES[$i]}
123+
cat << EOF > /tmp/${HOST}/kubeadmcfg.yaml
124+
---
125+
apiVersion: "kubeadm.k8s.io/v1beta4"
126+
kind: InitConfiguration
127+
nodeRegistration:
128+
name: ${NAME}
129+
localAPIEndpoint:
130+
advertiseAddress: ${HOST}
131+
---
132+
apiVersion: "kubeadm.k8s.io/v1beta4"
133+
kind: ClusterConfiguration
134+
etcd:
135+
local:
136+
serverCertSANs:
137+
- "${HOST}"
138+
peerCertSANs:
139+
- "${HOST}"
140+
extraArgs:
141+
- name: initial-cluster
142+
value: ${NAMES[0]}=https://${HOSTS[0]}:2380,${NAMES[1]}=https://${HOSTS[1]}:2380,${NAMES[2]}=https://${HOSTS[2]}:2380
143+
- name: initial-cluster-state
144+
value: new
145+
- name: name
146+
value: ${NAME}
147+
- name: listen-peer-urls
148+
value: https://${HOST}:2380
149+
- name: listen-client-urls
150+
value: https://${HOST}:2379
151+
- name: advertise-client-urls
152+
value: https://${HOST}:2379
153+
- name: initial-advertise-peer-urls
154+
value: https://${HOST}:2380
155+
EOF
156+
done
157+
```
158+
159+
1. Tạo cơ quan cấp chứng chỉ (CA).
160+
161+
Nếu bạn đã có một CA, việc tiếp theo chỉ cần sao chép các file `crt`
162+
`key` của CA tới `/etc/kubernetes/pki/etcd/ca.crt`
163+
`/etc/kubernetes/pki/etcd/ca.key`. Sau khi các file đó được sao chép,
164+
tiến hành các bước tiếp theo, "Tạo các chứng chỉ cho từng member member".
165+
166+
Nếu bạn chưa có CA nào, hãy chạy câu lệnh này trên `$HOST0` (nơi bạn
167+
tạo các file cấu hình cho kubeadm).
168+
169+
```
170+
kubeadm init phase certs etcd-ca
171+
```
172+
173+
Nó sẽ tạo ra hai file:
174+
175+
- `/etc/kubernetes/pki/etcd/ca.crt`
176+
- `/etc/kubernetes/pki/etcd/ca.key`
177+
178+
1. Tạo các chứng chỉ cho từng member member.
179+
180+
```sh
181+
kubeadm init phase certs etcd-server --config=/tmp/${HOST2}/kubeadmcfg.yaml
182+
kubeadm init phase certs etcd-peer --config=/tmp/${HOST2}/kubeadmcfg.yaml
183+
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST2}/kubeadmcfg.yaml
184+
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST2}/kubeadmcfg.yaml
185+
cp -R /etc/kubernetes/pki /tmp/${HOST2}/
186+
# Dọn dẹp các chứng chỉ không sử dụng
187+
find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete
188+
189+
kubeadm init phase certs etcd-server --config=/tmp/${HOST1}/kubeadmcfg.yaml
190+
kubeadm init phase certs etcd-peer --config=/tmp/${HOST1}/kubeadmcfg.yaml
191+
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST1}/kubeadmcfg.yaml
192+
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST1}/kubeadmcfg.yaml
193+
cp -R /etc/kubernetes/pki /tmp/${HOST1}/
194+
find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete
195+
196+
kubeadm init phase certs etcd-server --config=/tmp/${HOST0}/kubeadmcfg.yaml
197+
kubeadm init phase certs etcd-peer --config=/tmp/${HOST0}/kubeadmcfg.yaml
198+
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST0}/kubeadmcfg.yaml
199+
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST0}/kubeadmcfg.yaml
200+
# Không cần phải di chuyển các chứng chỉ vì chúng dành cho HOST0
201+
202+
# Dọn dẹp các chứng chỉ không nên sao chép khỏi máy chủ này
203+
find /tmp/${HOST2} -name ca.key -type f -delete
204+
find /tmp/${HOST1} -name ca.key -type f -delete
205+
```
206+
207+
1. Sao chép các chứng chỉ và các cấu hình kubeadm.
208+
209+
Các chứng chỉ này đã được tạo ra và bây giờ chúng cần được đưa tới từng máy chủ
210+
tương ứng.
211+
212+
```sh
213+
USER=ubuntu
214+
HOST=${HOST1}
215+
scp -r /tmp/${HOST}/* ${USER}@${HOST}:
216+
ssh ${USER}@${HOST}
217+
USER@HOST $ sudo -Es
218+
root@HOST $ chown -R root:root pki
219+
root@HOST $ mv pki /etc/kubernetes/
220+
```
221+
222+
1. Đảm bảo đã có đủ toàn bộ các file cần thiết.
223+
224+
Danh sách đầy đủ các file cần thiết trên `$HOST0` gồm:
225+
226+
```
227+
/tmp/${HOST0}
228+
└── kubeadmcfg.yaml
229+
---
230+
/etc/kubernetes/pki
231+
├── apiserver-etcd-client.crt
232+
├── apiserver-etcd-client.keyt
233+
└── etcd
234+
├── ca.crt
235+
├── ca.key
236+
├── healthcheck-client.crt
237+
├── healthcheck-client.key
238+
├── peer.crt
239+
├── peer.key
240+
├── server.crt
241+
└── server.key
242+
```
243+
244+
Trên `$HOST1`:
245+
246+
```
247+
$HOME
248+
└── kubeadmcfg.yaml
249+
---
250+
/etc/kubernetes/pki
251+
├── apiserver-etcd-client.crt
252+
├── apiserver-etcd-client.key
253+
└── etcd
254+
├── ca.crt
255+
├── healthcheck-client.crt
256+
├── healthcheck-client.key
257+
├── peer.crt
258+
├── peer.key
259+
├── server.crt
260+
└── server.key
261+
```
262+
263+
Trên `$HOST2`:
264+
265+
```
266+
$HOME
267+
└── kubeadmcfg.yaml
268+
---
269+
/etc/kubernetes/pki
270+
├── apiserver-etcd-client.crt
271+
├── apiserver-etcd-client.key
272+
└── etcd
273+
├── ca.crt
274+
├── healthcheck-client.crt
275+
├── healthcheck-client.key
276+
├── peer.crt
277+
├── peer.key
278+
├── server.crt
279+
└── server.key
280+
```
281+
282+
1. Tạo các manifest cho static pod.
283+
284+
Bây giờ các chứng chỉ và cấu hình đã có, đã đến lúc tạo các manifest.
285+
Trên mỗi máy chủ, hãy chạy lệnh `kubeadm` để tạo static manifest
286+
cho etcd.
287+
288+
```sh
289+
root@HOST0 $ kubeadm init phase etcd local --config=/tmp/${HOST0}/kubeadmcfg.yaml
290+
root@HOST1 $ kubeadm init phase etcd local --config=$HOME/kubeadmcfg.yaml
291+
root@HOST2 $ kubeadm init phase etcd local --config=$HOME/kubeadmcfg.yaml
292+
```
293+
294+
1. Tùy chọn: Kiểm tra sức khỏe cụm.
295+
296+
Nếu `etcdctl` không có sẵn, bạn có thể chạy công cụ này trong một container image.
297+
Bạn sẽ thực hiện điều đó trực tiếp với container runtime của mình bằng cách sử dụng
298+
một công cụ như `crictl run` và không thông qua Kubernetes.
299+
300+
```sh
301+
ETCDCTL_API=3 etcdctl \
302+
--cert /etc/kubernetes/pki/etcd/peer.crt \
303+
--key /etc/kubernetes/pki/etcd/peer.key \
304+
--cacert /etc/kubernetes/pki/etcd/ca.crt \
305+
--endpoints https://${HOST0}:2379 endpoint health
306+
...
307+
https://[HOST0 IP]:2379 is healthy: successfully committed proposal: took = 16.283339ms
308+
https://[HOST1 IP]:2379 is healthy: successfully committed proposal: took = 19.44402ms
309+
https://[HOST2 IP]:2379 is healthy: successfully committed proposal: took = 35.926451ms
310+
```
311+
312+
- Đặt `${HOST0}` bằng địa chỉ IP của máy chủ bạn đang kiểm tra.
313+
314+
315+
## {{% heading "whatsnext" %}}
316+
317+
Một khi bạn đã có một cụm etcd với 3 member đang chạy, bạn có thể tiếp tục thiết lập
318+
một control plane có tính sẵn sàng cao bằng
319+
[phương pháp etcd bên ngoài với kubeadm](/docs/setup/production-environment/tools/kubeadm/high-availability/).

0 commit comments

Comments
 (0)