kubeadm λ²μ : 1.10.2
νκ²½ :
λͺ λ¬ μ μ μ λ '곡μ'λ¬Έμ https://kubernetes.io/docs/setup/independent/high-availability/μ λ°λΌ kubeadm 1.9.3
μ¬μ©νμ¬ kubernetes 1.9.3 HA ν΄λ¬μ€ν°λ₯Ό λ§λ€μμ΅λλ€. etcd
μ μ ν¬λλ₯Ό μ¬μ©νμ¬ λ§μ€ν° λ
Έλμμ νΈμ€ν
νλ HA ν΄λ¬μ€ν°
μ΅μ kubeadm
μ¬μ©νμ¬ ν΄λ¬μ€ν°λ₯Ό k8s 1.10.2
λ‘ μ
κ·Έλ μ΄λνκ³ μΆμμ΅λλ€. kubeadm
μ μ
λ°μ΄νΈ ν ν kubeadm upgrade plan
μ€νν λ λ€μ μ€λ₯κ° λ°μνμ΅λλ€.
[root@shared-cob-01 tmp]# kubeadm upgrade plan
[preflight] Running pre-flight checks.
[upgrade] Making sure the cluster is healthy:
[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[upgrade/plan] computing upgrade possibilities
[upgrade] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.9.3
[upgrade/versions] kubeadm version: v1.10.2
[upgrade/versions] Latest stable version: v1.10.2
[upgrade/versions] FATAL: context deadline exceeded
λ¬Έμ λ₯Ό μ‘°μ¬ν κ²°κ³Ό λ κ°μ§ κ·Όλ³Έ μμΈμ μ°Ύμμ΅λλ€.
kubeadm
λ etcd
ν΄λ¬μ€ν°λ₯Ό TLS νμ±νλ‘ μλ³νμ§ μμ΅λλ€.κ°μ΄λλ etcd
μ μ ν¬λμμ λ€μ λͺ
λ Ήμ μ¬μ©νλλ‘ μ§μν©λλ€.
- etcd --name <name> \
- --data-dir /var/lib/etcd \
- --listen-client-urls http://localhost:2379 \
- --advertise-client-urls http://localhost:2379 \
- --listen-peer-urls http://localhost:2380 \
- --initial-advertise-peer-urls http://localhost:2380 \
- --cert-file=/certs/server.pem \
- --key-file=/certs/server-key.pem \
- --client-cert-auth \
- --trusted-ca-file=/certs/ca.pem \
- --peer-cert-file=/certs/peer.pem \
- --peer-key-file=/certs/peer-key.pem \
- --peer-client-cert-auth \
- --peer-trusted-ca-file=/certs/ca.pem \
- --initial-cluster etcd0=https://<etcd0-ip-address>:2380,etcd1=https://<etcd1-ip-address>:2380,etcd2=https://<etcd2-ip-address>:2380 \
- --initial-cluster-token my-etcd-token \
- --initial-cluster-state new
kubeadm >= 1.10
κ²μ¬ (μ¬κΈ° : https://github.com/kubernetes/kubernetes/blob/release-1.10/cmd/kubeadm/app/util/etcd/etcd.go#L56) if etcd
λ μ μ pod λͺ
λ Ήμ΄μ λ€μ νλκ·Έκ° μλμ§ νμΈνμ¬ TLSλ₯Ό νμ±νν©λλ€.
"--cert-file=",
"--key-file=",
"--trusted-ca-file=",
"--client-cert-auth=",
"--peer-cert-file=",
"--peer-key-file=",
"--peer-trusted-ca-file=",
"--peer-client-cert-auth=",
κ·Έλ¬λ --client-cert-auth
λ° --peer-client-cert-auth
νλκ·Έκ° λ§€κ° λ³μμμ΄ μ§μΉ¨μ μ¬μ©λμμΌλ―λ‘ (λΆμΈ) kubeadm
λ etcd
ν΄λ¬μ€ν°κ° TLSλ₯Ό κ°λ κ²μ μΈμνμ§ λͺ»νμ΅λλ€. νμ±νλμμ΅λλ€.
κ°μΈ μμ :
- --client-cert-auth=true
λ° - --peer-client-cert-auth=true
λ₯Ό μ¬μ©νλλ‘ etcd
static pod λͺ
λ Ήμ μ
λ°μ΄νΈνμ΅λλ€.
μΌλ° μμ :
--client-cert-auth=true
λ° --peer-client-cert-auth=true
λ₯Ό μ¬μ©νλλ‘ μ§μΉ¨μ μ
λ°μ΄νΈνκ³ "--peer-cert-file"
λ° "--peer-key-file"
(λ±νΈ μ μΈ)λ₯Ό μ¬μ©νμ¬ kubeadm κ²μ¬λ₯Ό μνν©λλ€.
kubeadm
μμ μ¬λ°λ₯Έ μΈμ¦μλ₯Ό μ¬μ©νμ§ μμμ΅λλ€.ν¬μΈνΈ 1μ μμ ν νμλ kubeadm
μμ μ¬λ°λ₯Έ μΈμ¦μλ₯Ό μ¬μ©νμ§ μκΈ° λλ¬Έμ λ¬Έμ κ° κ³μ λ°μνμ΅λλ€.
kubeadm HA κ°μ΄λλ₯Ό λ°λ₯΄λ©΄ μ€μ λ‘ μμ± λ μΈμ¦μλ ca.pem
ca-key.pem
peer.pem
peer-key.pem
client.pem
client-key.pem
νμ§λ§ μ΅μ kubeadm
ca.crt
ca.key``peer.crt
peer.key``healthcheck-client.crt
healthcheck-client.key
ν©λλ€.
kubeadm-config
MasterConfiguration ν€ etcd.caFile
, etcd.certFile
λ° etcd.keyFile
μ 무μλ©λλ€.
κ°μΈ μμ :
.pem
μΈμ¦μμ μ΄λ¦μ .crt
λ° .key
μμνλ κ²μΌλ‘ λ³κ²½νκ³ μ΄λ₯Ό μ¬μ©νλλ‘ etcd
μ μ ν¬λ ꡬμ±μ μ
λ°μ΄νΈνμ΅λλ€.
μΌλ° μμ :
kubeadm-config
data.caFile
, data.certFile
λ° data.keyFile
κ°μ μ¬μ©νκ³ etcd μ μ ν¬λ μ μ (ν¬λ κ²½λ‘ + λ³Όλ₯¨ hostPath)μμ μ¬λ°λ₯Έ μΈμ¦μλ₯Ό μ μΆνκ±°λ μμ±ν©λλ€. μ
κ·Έλ μ΄λ μ€μ μ¬μ©ν μ μμ ν΄λΌμ΄μΈνΈ μΈμ¦μ.
μ κ·Έλ μ΄λ κ³νμ΄ μ¬λ°λ₯΄κ² μ€νλμ΄μΌν©λλ€.
https://kubernetes.io/docs/setup/independent/high-availability/μ λ°λΌ kubeadm 1.9.3
μ¬μ©νμ¬ k8s ha ν΄λ¬μ€ν°λ₯Ό λ§λ€κ³ μ΅μ kubeadm
μ¬μ©νμ¬ k8s >= 1.10
λ‘ μ
λ°μ΄νΈ ν΄λ³΄μμμ€. kubeadm
μ΄ λ¬Έμ λ kubeadm 1.10.3
μμ μμ λ κ²μΌλ‘ 보μ΄μ§λ§ μ μ etcd
ν¬λκ° 'μΈλΆ'λ‘ μΈμλκΈ° λλ¬Έμ μλμΌλ‘ μ
λ°μ΄νΈλμ§λ μμ΅λλ€.
kubeadm 1.10.3
νκ³ μμΌλ©° λμΌν λ¬Έμ κ° μμ΅λλ€. λ΄ ν΄λ¬μ€ν°λ μΈλΆ 보μ etcdκ°μλ 1.10.2μ
λλ€.
@brokenmass λ λ²μ§Έ μμΈμ λν 보 μ λκΉ?
caFile: /etc/kubernetes/pki/etcd/ca.crt
certFile: /etc/kubernetes/pki/etcd/healthcheck-client.crt
keyFile: /etc/kubernetes/pki/etcd/healthcheck-client.key
@detiber μ λ° λμ μ£Όμκ² μ΅λκΉ?
λΏ‘λΏ‘
μ κ²½μ°μλ κ°μ΄ λ€μκ³Ό κ°μ΅λλ€.
caFile: /etc/kubernetes/pki/etcd/ca.pem
certFile: /etc/kubernetes/pki/etcd/client.pem
keyFile: /etc/kubernetes/pki/etcd/client-key.pem
1.10.3μ΄ μ¬λ°λ₯΄κ² μλν©λλ€.
@brokenmass λ°λΌμ kubeadm 1.10.3μ μ¬μ©νλ©΄ κ°μΈ μ 보λ₯Ό μμ ν νμμμ΄ λͺ¨λ κ²μ΄ μλν©λλ€. μ΄ κ²½μ° λλ μ½κ° νΌλ μ€λ½μ΅λλ€. kubeadm 1.10.3μ΄ μμ§λ§μ΄ λ²κ·Έ λ³΄κ³ μμμ μΈκΈ ν κ²κ³Ό λμΌν μ€λ₯ λ©μμ§κ° μμ΅λλ€. λ΄ κ΅¬μ±μ λ€μ νμΈνκ² μ΅λλ€. λ€λ₯Έ κ³³μμ μ€μλ₯Ό ν μ μμ΅λλ€.
kubeadm-config, etcd static pods yml λ° kubeadm upgrade plan
μ μ 체 μΆλ ₯μ μ¬κΈ°μ μΆκ° (λλ kubernetes slackμ κ°μ
νκ³ μ§μ λ©μμ§ λ³΄λ΄κΈ°)
μ£μ‘ν©λλ€. λ°©κΈ μ΄κ±Έλ³΄κ³ μμ΅λλ€. @chuckha λ static-pod HA etcd λ¬Έμμ λν μλ μμ μ μννμ΅λλ€. μμΌλ‘ λ©°μΉ λμ κ·Έμ ν¨κ» μμ νμ¬ HA μ κ·Έλ μ΄λλ₯Ό λ°λ‘ μ‘μ μ μλμ§ νμΈνκ² μ΅λλ€.
@detiber κ°μ¬ν©λλ€. μ κ·Έλ μ΄λ κ³νμ΄ λ§μΉ¨λ΄ μλν©λλ€. νμ§λ§ ν΄λ¬μ€ν°λ₯Ό μ κ·Έλ μ΄λνλ €κ³ ν λ μΌλΆ κ²½μ 쑰건 λ¬Έμ μ μ§λ©΄ν©λλ€. λλλ‘ κ·Έκ²μ λλλ‘ μλν©λλ€. kubernetes / kubeadm / issues / 850 κ³Ό κ°μ μ€λ₯κ° λ°μν©λλ€. ν λ Έλμμ ν¬λλ₯Ό λ€μ μμνλ €κ³ νλ©΄ kubeadmμ΄ κ²½ν© μνλ‘ μ€νλ©λλ€.
μ€λ μ΄κ²μ λν ν μ€νΈ νκ²½ μ€μ μ μ»λ λ° μ½κ°μ κ±Έλ¦Όλμ΄ μκ²Όκ³ μ£Όλ§μ΄ μμλκΈ° μ μ μκ°μ΄ λΆμ‘±ν©λλ€. λ€μ μ£Ό μ΄μ λ€μ μ°λ½ λλ¦¬κ² μ΅λλ€.
/ ν λΉ @chuckha @detiber
@chuckha @detiber @stealthybox μ΄κ²μ λν μ λ°μ΄νΈκ° μμ΅λκΉ?
λ°λΌμ 1.9-> 1.10 HA μ κ·Έλ μ΄λλ μ§μλκ±°λ κ²μ¦ λ κ²½λ‘κ° μλλλ€.
μ°λ¦¬λ νμ¬ 1.11-> 1.12μ λν μ μ§ κ΄λ¦¬ λ¬Έμλ₯Ό μ λ°μ΄νΈνλ μ€μ΄λ©° μμΌλ‘λ κ³μ μ μ§ν κ³νμ λλ€.