쿠버네티스 설치 전에 개발환경은 Microsoft사의 Azure 클라우드의 서버 인프라에서 쿠버네티스를 설치하겠습니다. master, worker1, worker2, worker3 총 4개의 가상머신으로 클러스터를 구축하겠습니다.
쿠버네티스의 설치 방법은 여러가지가 있는데 쿠버네티스가 제공하는 kubeadm이라는 관리도구를 이용해서 설치해보겠습니다.
apt-get(Advanced Packaging Tool)은 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 패키지 관리 명령어 도구입니다. 쿠버네티스를 설치하기위해 필요한 명령어 도구 입니다.
apt-get update
아래 명령어를 입력하여 도커를 설치합니다.
apt-get install -y docker docker.io apt-transport-https ca-certificates curl openssh-client openssh-server traceroute gnupg-agent software-properties-common python3-pip
/etc/docker디렉터리에 daemon.json을 생성하여 아래와 같이 설정한다.
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl enable docker
쿠버네티스를 설치할 모든 노드에 다음 명령어를 차례대로 입력해 쿠버네티스 저장소를 추가한다.
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
모든 노드에서 쿠버네티스에 필요한 패지키를 내려받습니다. 다음과 같이 별도의 버전을 명시하지 않으면 최신 버전의 쿠버네티스가 설치됩니다.
apt-get update
apt-get install -y kubelet kubeadm kubectl kubernetes-cni
마스터 노드로 사용할 호스트에서 다음 명령어로 클러스터를 초기화합니다.
kubeadm init --apiserver-advertise-address 10.1.7.8 --pod-network-cidr=192.168.70.0/24
초기화가 완료되면 다음과 같은 출력 결과를 확인할 수 있습니다.
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.1.7.8:6443 --token ksi2qe.u1zfnll1cspqv4dc \
--discovery-token-ca-cert-hash sha256:876f6b4970cbcae2365fa5d9ef51ab505a6d65b9749172d90c42c10c5742e87a
중간에 출력된 3줄의 명령어를 복사해 마스터 노드에서 실행합니다. 맨 마지막에 출력된 명령어인 kubeadm join ...은 마스터를 제외한 노드인 워커 노드들(worker1, worker2, worker3)에서 실행합니다.
만약 root user라면 아래 명령어로 대체할 수 있습니다.
export KUBECONFIG=/etc/kubernetes/admin.conf
쿠버네티스의 컨테이너간 통신을 위해 calico라는 네트워크 플러그인을 설치합니다.
kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
설치가 정상적으로 완료 됐는지 확인하기 위해, 다음 명령어로 쿠버네티스 핵심 컴포넌트들의 실행 목록을 확인합니다. 전부 Running이라는 문구가 출력됐다면 정상적으로 설치가 완료된 것입니다.
calico-kube-controllers-7f6768fdfb-w4wsq 1/1 Running 0 41s
calico-node-4vbt2 0/1 Running 0 42s
calico-node-cl9fm 0/1 Running 0 42s
calico-node-ll6bw 0/1 Running 0 42s
calico-node-trxhf 0/1 Running 0 42s
Kubernetes는 bare metal 클러스터를위한 네트워크로드 밸런서 (LoadBalancer 유형의 서비스) 구현을 제공하지 않습니다.
bare metal 이란 가상머신이 host의 OS내에 설치된다기 보다 하드웨어에 직접 설치되는 컴퓨터 시스템이나 네트워크를 말한다.
kubectl create -f https://raw.githubusercontent.com/cilium/cilium/1.9.5/install/kubernetes/quick-install.yaml
kubectl edit configmap -n kube-system kube-proxy
kubectl edit configmap -n kube-system kube-proxy
#설정파일이 열리니, 특정 부분을 찾아서 아래와 같이 수정
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
strictARP: true
root@posicube-dev-k8s-master:~# cat /etc/kubernetes/admin.conf
apiVersion: v1
clusters:
- cluster:
certificate-authority-data:
...
위의 내용을 로컬 머신의 ~/.kube/에 yml로 저장
zsh의 alias에 추가
vi ~/.zshrc
alias aznode="export KUBECONFIG=/Users/jihongmin/.kube/config.yml"
적용
source ~/.zshrc
클러스터 변경
aznode
curl -sL https://github.com/derailed/k9s/releases/download/v0.24.7/k9s_Linux_x86_64.tar.gz | sudo tar xfz - -C /usr/local/bin k9s
참고자료: https://blog.outsider.ne.kr/346
참고자료: https://github.com/posicube-services/backoffice-k8s-playground