<aside> <img src="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4fdb62ea-b6a0-4289-b552-6fe2feed518a/logo.png" alt="https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4fdb62ea-b6a0-4289-b552-6fe2feed518a/logo.png" width="40px" /> Kubernetes
<aside> 🐳 Docker의 container 강점
Application을 운영할 때 VM보다 가볍다.
→ os를 안가지고있고, Kernel을 공유하기 때문
배포가 매우 편리하다. 지속적인 개발과 통합
→ Scale-in/out이 쉽다.
Resource를 충분하게 활용할 수 있다. </aside>
<aside> 🐳 Docker의 container 약점
→ container의 약점을 보완한 K8S - Container Orchestration
<aside> 📌 K8S (container orchestration)
복잡한 container 환경을 kubernetes가 관리
Clustering → 여러 node의 중앙관리 (하나의 논리적인 단위로)
상태(State)관리 → Pod 개수 보장 (Pod livenessProbe) = 서버가 죽어도 자동으로 보정
부하(Scheduling)으로 배포 관리
→ Pod 배포시 부하 정도가 가장 적절한 node를 선정하여 자동배포
**배포(Deployment)**버전관리
<aside> 💡 서비스 관리를 개별적 → 집단적
대부분 개별 시스템(node)와 상호작용할 필요는 없다.
비교적 Stateless(상태 비저장)
Stateful : 관계상태를 유지 → 비교적 속도가 느림
Stateless : 관계상태를 유지 하지 않음 → 속도가 좀 더 빠름 (default)
ex) 4계층 프로토콜 : TCP(stateful), UDP(stateless)
7계층 프로토콜 : HTTP(stateless)
</aside>
Container Orchestration
→ 다수의 Container를 다수의 node(Cluster)에 적절하게 분산 실행하고, 원하는 상태로 실행상태를 유지해주고, 다운타임 없이 유동적으로 Scale을 확장/축소할 수 있게 도와준다.
→ 배포(Deployment)/운영(Operation)/스케일링(Scaling)
</aside>
<aside> 🚧 Kubernetes 설치
All-in-One 방식 → 개발자
Cluster 방식 → 일반적
관리형 kubernetes
설치형 Kubernetes
SWAP 기능 끄기
swapoff -a
vi /etc/fstab
reboot
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
vi /etc/sysctl.conf
# 내용추가
net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1
reboot
# kubernetes repository 다운
cd /etc/yum.repos.d
wget <http://down.cloudshell.kr/k8s/kubernetes.repo>
vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd 바로 뒤에
--exec-opt native.cgroupdriver=systemd
를 삽입한다
systemctl daemon-reload
systemctl restart docker
# 확인
docker info | grep -i cgroup
#kubernetes 설치
yum install -y kubelet-1.21.1-0 kubeadm-1.21.1-0 kubectl-1.21.1-0
systemctl daemon-reload
systemctl enable kubelet --now
#Clustering 구성하기
kubeadm init --kubernetes-version=v1.21.1
# Master API로 commands를 config
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 꼭 복사
⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
kubeadm join 10.0.2.12:6443 --token il46it.62rwg4lqjokztqbk \\
--discovery-token-ca-cert-hash sha256:92001b9269af854651db34a3e1f7e4fd19c06803c53717b7dbc3df4323d09f77
⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
# version 확인 (kubectl: 제어, kubeamd: 관리자, kubelet: )
kubectl version --short
kubeadm version -o yaml
kubelet --version
#weave-net 설치
export kubever=$(kubectl version | base64 | tr -d '\\n')
kubectl apply -f "<https://cloud.weave.works/k8s/net?k8s-version=$kubever>"
kubectl get pods -A
kubectl get pod -n kube-system
kubectl get nodes
# node1, node2, node3 실행
kubeadm join 10.0.2.12:6443 --token il46it.62rwg4lqjokztqbk \\
--discovery-token-ca-cert-hash sha256:92001b9269af854651db34a3e1f7e4fd19c06803c53717b7dbc3df4323d09f77
# master에서 확인
kubectl get nodes
kubeadm
: 클러스터를 부트스트랩하는 명령이다.kubelet
: 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트이다.kubectl
: 클러스터와 통신하기 위한 커맨드 라인 유틸리티이다.
</aside></aside>