🧭 Kubernetes | August 04, 2021
쿠버네티스를 실습할 수 있는 환경을 구성하고,
전체적인 개념과 구성을 알아보고 실습을 통해 자세히 살펴봅시다.
사실 공부한지가 너무 오래되서 다시 공부를 시작…
당연히 사내 hub를 통해 컨테이너 이미지를 관리할 수 있습니다.
마스터노드와 워커 노드에 스크립트를 작성하면 됩니다.
cat > install.sh
# 아래 내용을 복사
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
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
# Enter 이후, Ctrl + D
$ chmod +x install.sh
$ sh install.sh
[pods.yaml] 파일 작성
apiVersion: v1
kind: Pod
metadata:
name: pod-1
spec:
containers:
- name: container1
image: kubetm/p8000
ports:
- containerPort: 8000
- name: container2
image: kubetm/p8080
ports:
- containerPort: 8080
$ kubectl create -f pods.yaml
$ kubectl get pods -o wide
$ kubectl describe pods
curl
명령어로 컨테이너 포트 확인
알아두면 좋은 것!
Pod 재생성 시 Pod의 IP는 자동으로 바뀝니다.
apiVersion: v1
kind: ReplicationController
metadata:
name: replication-1
spec:
replicas: 1
selector:
app: rc
template:
metadata:
name: pod-1
labels:
app: rc
spec:
containers:
- name: container
image: kubetm/init
$ kubectl create -f replica.yaml
$ kubectl delete pod replication-1
알아두면 좋은 것!
라벨을 사용하는 이유는 목적에 따라 Object들을 따로 분류하고, 편하게 관리하기 위함입니다.
[Pods2.yaml] 파일 생성
apiVersion: v1
kind: Pod
metadata:
name: pod-1(2,3,4,5,6)
labels:
type: web(db, server)
lo: dev(production)
spec:
containers:
- name: container
image: kubetm/init
$ kubectl create -f pods2.yaml
$ kubectl get pod
apiVersion: v1
kind: Service
metadata:
name: svc-1
spec:
selector:
type: web
ports:
- port: 8080
$ kubectl create -f service.yaml
들어가기 전에..
워커 노드를 직접 지정하는 것이 아니라면 스케줄러는 각각의 노드들의 자원을 점수로 환산해
가장 좋은 점수를 받은 워커 노드에 자원을 자동으로 배치해 줍니다.
현재 노드의 라벨들을 확인
$ kubectl get nodes --show-labels
apiVersion: v1
kind: Pod
metadata:
name: pod-7
spec:
nodeSelector: kubernetes.io/hostname=slavenod # 이쪽 부분
containers:
- name: container
image: kubetm/init