2021-03-11 Docker & Kubernetes 배경지식 및 학습 환경 setting (Ubuntu)
3.11 을 기점으로 4월 중순까지 주1회 Kubernetes 실습을 진행한다.
이번 주차에는 간단히 Cgroup
과 Docker
에 대해 알아보고 Kubernetes 실습을 위한 환경을 구성해 본다.
process들의 자원 사용을 제한하고 격리시키는 Linux kernel의 기능이다.
Docker & Container는 이 위에서 동작하는 단일 Linux Kernel을 사용하는 제어 Host가,
다수의 분리된 Linux system 을 동작시키기 위한 가상화 기법이다.
Docker는 Linux 응용 program들을 container 안에 배치시키는 것을 자동화 하는 Container 관리 SW이다.
컨테이너의 배포, 관리, 확장, networking, 가용성을 자동화해주는 도구이다.
기능 :
ex) Kubernetes, Docker Swarm, Apache Mesos
다음 내용들은 회사의 vdi (CentOS7) 가상 머신 두 대를 이용하였음.
(한 대는 Master node, 다른 한 대는 Worker node 로 구성할 것임.)
(root 계정으로 접속을 가정.)
이 중 277번 Machine 이 Master node, 278번 Machine이 Worker node로 설정하였음
Docker 설치
install requirements
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
Add Docker repository
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Install Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
확인
systemctl enable docker && systemctl start docker
docker version
Kubernetes Apt Repository 구성
sudo apt-get install -y apt-transport-https curl
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
sudo apt-get update
통신 문제를 방지하기 위한 SE Linux 모드 변경
setenforce 0
Kubernetes 설치 & Kubelet 활성화 (k8s는 안정된 version인 1.15.5 로 설치를 권장)
sudo apt-get install -y kubelet=1.15.5-00 kubeadm=1.15.5-00 kubectl=1.15.5-00
systemctl enable kubelet && systemctl start kubelet
자동 업데이트 방지
sudo apt-mark hold kubelet kubeadm kubectl
IPTables(방화벽 설정하는 도구) 설정
(/proc/sys/net/ipv4/ip_forward
를 1 로 설정하는 작업)
vi /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
IPTables 설정 파일 적용
sysctl --system
br_netfileter 모듈 load
lsmod | grep br_netfilter
Port 허용
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --reload
Kubernetes 초기화에 사용될 이미지 pull
kubeadm config images pull
Swap error처리
swapoff -a
, 또한 vi /etc/fstab
에서 swap 설정 주석처리 -> 영구적으로 끔.
Kubernets Cluster 설정(Master Only)
kubeadm init --pod-network-cidr=10.244.0.0/16
Kubernetes Cluster 접근 설정(Master Only)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Kube flannel 적용(Master Only)
wget https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
ip a # Network Interface 명 확인
vi ube-flannel.yml # command에 --iface=network-interface명 추가.
CNI(Container Network Interface) 설치(Master Only)
curl https://docs.projectcalico.org/archive/v3.8/manifests/calico.yaml -O
kubectl apply -f calico.yaml
kubectl apply -f kube-flannel.yml
Kubernetes 주요 POD 동작 확인 & master node 연결 확인(Master Only)
kubectl get pod -n kube-system
kubectl get nodes
(calico 관련 오류 - 방화벽 문제이므로 systemctl stop firewalld
로 방화벽 아예 꺼보자.)
여기까지 성공하였다면, Master node 구성 완료.
이제 Master node 에 Worker node를 붙여 보자.
Master node에 추가(Worker Only)
kubeadm join [master-ip]:6443 --token [token] --discovery-token-ca-cert-hash sha256:[hash]
Token & Hash값 확인(Master node에서 확인)
kubeadm token list
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
Token list에 값이 없을 경우 Token 생성
kubeadm token create
결과 확인.
참고. Kubernetes master IP가 바뀌었을때
git clone https://github.com/dohyunKim12/kubernetes.git