# 쿠버네티스 클러스터링 환경 구성을 위해 k8s Master Node : 3, k8s Worker Node : 3 으로 k8s 클러스터링 환경을 만든다.
1. Swap을 사용하지 않도록 설정한다. (모든 노드 공통)
swapoff -a
echo 0 > /proc/sys/vm/swappiness
sed -e '/swap/ s/^#*/#/' -i /etc/fstab
2. docker 설치 (모든 노드 공통)
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
3. docker 데몬 교체 (모든 노드 공통)
# Docker 데몬이 사용하는 드라이버를 cgroupfs 대신 systemd를 사용하도록 설정
cat << EOF | sudo tee –a /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
# 위 명령어를 실행 후 아래의 명령어 실행
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload
sudo systemctl restart docker
4. kubernetes 설치 (모든 노드 공통)
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
5. hostname 설정 (모든 노드 공통)
sudo vi /etc/hosts
172.16.0.86 master1
172.16.0.189 master2
172.16.0.142 master3
# 각 노드 서버에서 실행
# master1
hostnamectl set-hostname master1
# master2
hostnamectl set-hostname master2
# master3
hostnamectl set-hostname master3
6. HAproxy 로드밸런서 설치 및 설정 (Master1 노드에서 수행)
# 프로그램 설치
sudo apt install haproxy -y
# 세팅
cat << EOF | sudo tee -a /etc/haproxy/haproxy.cfg
frontend kubernetes-master-lb
bind 0.0.0.0:26443
option tcplog
mode tcp
default_backend kubernetes-master-nodes
backend kubernetes-master-nodes
mode tcp
balance roundrobin
option tcp-check
option tcplog
server master1 172.16.0.86:6443 check
server master2 172.16.0.189:6443 check
server master3 172.16.0.142:6443 check
EOF
# 재시작
sudo systemctl restart haproxy
sudo systemctl enable haproxy
7. 클러스터 생성 (Master1 노드에서 실행)
- 아래의 클러스터 생성 시 설명에 대해서는 자세히? 리포팅 할 필요 있음.
--control-plane-endpoint 파라미터: ControlPlaneEndpoint는 제어부에 대해 안정적인 IP 주소 또는 DNS 이름을 설정합니다.
--apiserver-advertise-address 파라미터: 다른 노드가 마스터 노드에 접근할 수 있는 IP 주소를 명시한다.
--pod-network-cidr 파라미터: 쿠버네티스에서 사용할 컨테이너의 네트워크 대역을 지정한다.
(실제 서버에 할당된 IP와 중복되지 않도록 해야 한다. 다음 단계에서 진행할 네트워크 플러그인 설치 과정에서 Calico를 설치할 계획이라 CIDR 범위를 192.168.0.0/16로 지정했다. 만약 Flannel을 사용한다면 10.244.0.0./16을 사용해야 한다.)
--apiserver-cert-extra-sans 파라미터: 이 값에는 쿠버네티스가 생성한 TLS 인증서에 적용할 IP 또는 도메인을 명시할 수 있다. 로컬 환경에서 kubectl을 통해 이 클러스터에 접근하려면 kube-apiserver와 통신할 수 있어야 하기 때문에 마스터 노드가 실행되고 있는 EC2 인스턴스의 퍼블릭 IP 주소를 추가해야 한다.
--upload-certs 파라미터: 노드 join에 필요한 cert key값을 받기위해 필요.
#sudo kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" --upload-certs
#가로 코드
sudo kubeadm init --control-plane-endpoint 172.16.0.86:26443 --apiserver-advertise-address=0.0.0.0 --pod-network-cidr=192.168.0.0/16 --apiserver-cert-extra-sans=10.1.1.10,3.34.123.28 --upload-certs
#위의 가로 코드를 보기좋게 정리한 코드 (같은 내용임)
sudo kubeadm init \
--control-plane-endpoint 172.16.0.86:26443 \
--apiserver-advertise-address=0.0.0.0 \
--pod-network-cidr=192.168.0.0/16 \
--apiserver-cert-extra-sans=10.1.1.10,3.34.123.28 \
--upload-certs
# 위의 코드 실행 후 아래 명령어를 순서대로 실행해 줘야함
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
8. Master2, Master3 노드를 Master1 노드에 연결
- join 명령어가 아래와 같이 2개가 등장, 위에 control-plane 같이 있는 코드는 마스터 노드가 join해야 하는 코드임
You can now join any number of the control-plane node running the following command on each as root:
#마스터 노드에서 실행해야 하는 코드(아래의 값은 임의의 값으로 변경 함)
kubeadm join 172.16.0.86:26443 --token 28wiw3.xofi21ouf9nek33u \
--discovery-token-ca-cert-hash sha256:f2ff432d696c***********09c7c3c3e4fadd5a120d592a8fd067f \
--control-plane --certificate-key 4a99d1012a626df************a339ac691786332d7d5f62666
...
Then you can join any number of worker nodes by running the following on each as root:
#워커 노드에서 실행해야 하는 코드(아래의 값은 임의의 값으로 변경 함)
kubeadm join 172.16.0.86:26443 --token 28wiw3.xo************fiek33u \
--discovery-token-ca-cert-hash sha256:f2ff******************09c7c3c3e4fadd5a120d592a8fd067f
9. CNI 설치 (모든 노드 공통)
택 1
1. fannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2. weave
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')&env.IPALLOC_RANGE=10.244.0.0/16"
#나는 3번 설치함
3. calico
kubectl apply -f https://docs.projectcalico.org/v3.19/manifests/calico.yaml
10. 서비스 확인
- 마스터 노드 3개가 묶인것을 확인 할 수 있다.
- 워크노드의 추가는 매우 간단하다. 이전의 워커노드에서 실행해야하는 join 명령어를 복사하여 워커 노드에서 실행하면 된다.
11. 기타 ()
- 만약 아래와 같은 에러가 발생 시
Unable to connect to the server: x509:
certificate signed by unknown authority
(possibly because of "crypto/rsa: verification error"
while trying to verify candidate authority certificate "kubernetes")
- 명령어 실행
unset KUBECONFIG
export KUBECONFIG=/etc/kubernetes/admin.conf
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
12. 워커노드 참여
2022.02.24 - [혼자하는 프로젝트/AWS + 쿠버네티스 + Docker] - K8S Master Node HA 구성 (2개의 Worker Node 참여)
- 끝 -
'혼자하는 프로젝트 > AWS_쿠버네티스_Docker' 카테고리의 다른 글
K8S Master Node HA 구성 (2개의 Worker Node 참여) (0) | 2022.02.24 |
---|---|
워커노드(worker node)를 추가해보자 (0) | 2021.09.30 |
AWS 에서 쿠버네티스 클러스터링 구현 (0) | 2021.09.28 |
AWS 에서 쿠버네티스 마스터 노드와 Worker 노드 생성 및 연결 (0) | 2021.09.28 |
2. 워드프레스 Docker 이미지 생성 및 쿠버네티스 설치 (0) | 2021.09.27 |