기본적인 kubernetes resource, option 등을 설명한 블로그입니다. 추가적인 기능을 보고싶으시면 docs를 참고바랍니다.
https://kubernetes.io/docs/home/
- control plane(master node)를 최소 3개이상 운영함으로써 Highly Available(HA) cluster 운영.
- load balancer를 실행 및 여러 master node와 연결 및 etcd 동기화 작업, 여러 대의 etcd 중 leader를 뽑고 write권한이 있으며, 다른 etcd에 copy한다. -> RAFT 프로토콜
- 만약 다른 노드가 죽어서 etcd를 copy를 못시킨다면, quorum에 따라 결과가 다르게 나타난다.
- majority/2 + 1을 내림한 값(quorum)이 최소한의 살아있는 node개수여야한다.
- worker nodes은 master node와 아니라 load balancer와 연결.
- load balancer는 어떤 master node가 active되고 standby되는지 결정해야한다.
- load balancer를 제외한 master node가 3개 이상, 홀수개수면 etcd 운영에 있어서 좋다.
# master nodes의 controller manager, scheduler의 작동방식
kube-controller-manager --leader-elect true
--leader-elect-lease-duration 15s
--leader-elect-renew-deadline 10s
--leader-elect-retry-period 2s
# etcd같은 경우는 같은 노드에 있을 경우 위험성이 높고
# 다른 노드에 설치할 경우 설정하기 까다롭고 자원소모가 크다.
# 다른 노드에 설치한다면 아래와 같이 etcd server 위치를 설정
ExecStart=/usr/local/bin/kube-apiserver \\
...
--etcd-servers=https://ip:port,https://ip:port
- HA cluster는 기본 single master setting에서 LB(Load Balancer) 구성(nginx)과 master2, master3를 master1에 join이 추가.
- single master setting은 https://cksdid4993.tistory.com/24 참고
- docker 설치(모든 노드들에 설치)
- kubeadm 설치(master와 worker 노드들에만 설치)
- kubeadm, kubelet, kubectl 설치(master, worker 노드들에만 설치)
- LB(Load Balancer) 구성
mkdir /etc/nginx
cat << END > /etc/nginx/nginx.conf
events {}
stream {
upstream stream_backend {
least_conn;
server 10.100.0.101:6443;
server 10.100.0.102:6443;
server 10.100.0.103:6443;
}
server {
listen 6443;
proxy_pass stream_backend;
proxy_timeout 300s;
proxy_connect_timeout 1s;
}
}
END
- docker run --name proxy -v /etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro --restart=always -p 6443:6443 -d nginx -> --restart=always(항상 docker daemon과 함께 실행)
- kubeadm init --control-plane-endpoint "[LB ip혹은 domain:6443]" --upload-certs -> master1 kubeadm init 명령으로 초기화 -> master node join용 token과 worker node join용 token이 나온다.
- kubeadm token list -> token 정보
kubeadm token delete [token 값]
kubeadm token create --ttl [시간] - token을 이용해서 master2, master3 노드들에 join 명령어 입력.
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Weave Net CNI 설치는 통해 각 노드들을 READY로.
- worker node에서 join 명령어 입력
kubeadm join [Master IP] --token [Master token] --discovery-token-ca-cert-hash [hash value] -> node가 master에 join 한다.
2. worker node에서 kubectl 명령어 입력하고 싶을 때
mkdir -p $HOME/.kube
scp master1:/etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u)$(id -g) $HOME/.kube/config
'kubernetes, helm, rancher' 카테고리의 다른 글
kubernetes labels (0) | 2021.11.28 |
---|---|
kubernetes services (0) | 2021.11.27 |
kubernetes Statefulset, Job, Cronjob (0) | 2021.11.25 |
kubernetes ReplicaSet, Deployment, Daemon set (0) | 2021.11.24 |
kubernetes pod resources, env, ReplicationController (0) | 2021.11.23 |