์ฌ๋ฌ ๊ฐ์ ์๋ฒ ์ธ์คํด์ค์ ์ปจํ ์ด๋๋ฅผ ๋ฐฐํฌํ๊ณ ์ด์,๊ด๋ฆฌํ๊ธฐ ์ํจ์ด๋ค.
ํ์ฅ์ ๋ฌธ์
๊ด๋ฆฌ์ ๋ฌธ์
CPU 2๊ฐ ์ด์, ๋ฉ๋ชจ๋ฆฌ 1700MB์ด์ (t3.small)
๋์ปค ์ค์น
1. apt ์ ๋ฐ์ดํธ
sudo apt-get update
2. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
3. ์ค์ด๋ํค ๋ค์ด๋ก๋
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
4. ๋ ํฌ์งํ ๋ฆฌ ์ถ๊ฐ
echo \
"deb [arch=$(dpkg --print-architecture) 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
5. apt ์ ๋ฐ์ดํธ
sudo apt-get update
6. ๋์ปค์ค์น
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
7. ์คํ๊ถํ ์กฐ์
sudo usermod -aG docker $USER
๋ง์คํฐ ์ค์น
1. EC2 ์ธ๋ฐ์ด๋ ํธ์ง
TCP 6443 โก๏ธ ์ฟ ๋ฒ๋คํฐ์ค API ์๋ฒ
TCP 2379-2480 โก๏ธ etcd ์๋ฒ ํด๋ผ์ด์ธํธ API
TCP 10250 โก๏ธ kubelet API
TCP 10251 โก๏ธ kube scheduler
TCP 10252 โก๏ธ Kube-controller-manager
UDP 8472 โก๏ธ CNI ๊ด๋ จ
UDP 8285 โก๏ธ CNI ๊ด๋ จ
2. ๊ตฌ๊ธ ํด๋ผ์ฐ๋ ๊ณต๊ฐ ์ฌ์ด๋ ํค ๋ค์ด๋ก๋
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
3. ์ฟ ๋ฒ๋คํฐ์ค apt ๋ ํฌ์งํ ๋ฆฌ ์ถ๊ฐ
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
4. apt ์ ๋ฐ์ดํธ
sudo apt-get update
5. kubelet, kubeadm, kubectl ์ค์น
sudo apt-get install -y kubelet kubeadm kubectl
6. ๋ฒ์ ๊ณ ์
sudo apt-mark hold kubelet kubeadm kubectl
7. ๋์ปค ๋ฐ๋ชฌ์ ๋๋ผ์ด๋ฒ ๊ต์ฒด
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
8. ๋์ปค ๋ฐ๋ชฌ ์ฌ์คํ
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
# kubelet๊ฐ ์คํ์ธ์ง ํ์ธ
sudo systemctl status kubelet
# ์คํ์ค์ด ์๋ ๊ฒฝ์ฐ
sudo systemctl start kubelet
9. ํด๋ฌ์คํฐ ์ด๊ธฐํ
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
10. ํด๋ฌ์คํฐ ๋ฆฌ์ (์๋ฌ๋ฐ์์ ์ด๊ธฐํ ๐คฎ)
sudo kubeadm reset
rm -rf $HOME/.kube/config
11. ์กฐ์ธ๋ช ๋ น์ด๋ฅผ ๋ณต์ฌํด๋๋ค. (๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด)
kubeadm join 172.31.14.147:6443 --token wza8ug.yfe906i22cih2dlb \
--discovery-token-ca-cert-hash sha256:13244b42705b1bbc4fcb445cf39f2792bd05abfe31aacb520da5337aa8b9679a
12. kubectl ์ฌ์ฉ์ค์
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
13. kubectl ๋์ํ์ธ
kubectl get namespace
14. ๋ง์คํฐ ์ฌํ ์ ๊ฑฐ
kubectl taint nodes --all node-role.kubernetes.io/master-
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
1. EC2 ์์ฑ t3.small
2. ์ธ๋ฐ์ด๋ ์ค์
TCP 10250 โก๏ธ kubelet API
TCP 30000-32767 โก๏ธ NodePort
UDP 8472 โก๏ธ CNI๊ด๋ จ
UDP 8285 โก๏ธ CNI๊ด๋ จ
3. ๋ ธ๋์๋ ๋ง์คํฐ์ ๋์ผํ๊ฒ ๋์ปค ์ค์น
4. ์ฟ ๋ฒ๋คํฐ์ค ์ค์น (ํด๋ฌ์คํฐ ์ด๊ธฐํ ์ ๊น์ง๋ง ์ค์ )
5. ๋ง์คํฐ ์์ฑ์ ๋ณต์ฌํ join ๋ช ๋ น์ด๋ฅผ ์คํ (sudo๋ก ์คํ)
sudo kubeadm join 172.31.14.147:6443 --token wza8ug.yfe906i22cih2dlb \
--discovery-token-ca-cert-hash sha256:13244b42705b1bbc4fcb445cf39f2792bd05abfe31aacb520da5337aa8b9679a
6. ๋ง์คํฐ์์ ๋ ธ๋๊ฐ ์ ์ฐ๊ฒฐ๋์๋ ์ง ํ์ธ
kubectl get nodes
ํ๋์์ฑ
1. ํ๋ ์์ฑ์ ์ํ ์ค์ ํ์ผ ์์ฑ
vi my-flask-pod.yaml
2. Pod ์์ฑ์ ์ํ yml ํ์ผ์์ฑ
apiVersion: v1
kind: Pod
metadata:
labels:
app: ํ๋์ด๋ฆ
spec:
containers: # ์ฌ๋ฌ ๊ฐ ์ปจํ
์ด๋ ์ค์ ๊ฐ๋ฅ
- name: ์ปจํ
์ด๋ ์ด๋ฆ
image: ๋์ปคํ๋ธ์์ ๊ฐ์ ธ์ฌ ์ด๋ฏธ์ง
ports:
- containerPort: 5000
3. Pod ์์ฑ (์ปจํ ์ด๋ ๊ตฌ๋)
kubectl apply -f ํ๋์ค์ ํ์ผ_์ด๋ฆ
[ ์์ฑ๋ Pod ํ์ธ -f: ํ์ผ๋ช
]
kubectl get -f ํ๋์ค์ ํ์ผ_์ด๋ฆ
[ Pod ์์ธ์ ๋ณด ]
kubectl describe -f ํ๋์ค์ ํ์ผ_์ด๋ฆ
[ Pod ๋ก๊ทธํ์ธ ]
kubectl logs -f ํ๋์ค์ ํ์ผ_์ด๋ฆ
[ Pod ์ญ์ ]
kubectl delete -f ํ๋์ค์ ํ์ผ_์ด๋ฆ
4. ์ธ๋ถ์์ Pod์ ์ ๊ทผํ ์ ์๋๋ก ์ค์ โก๏ธ Service
1. ์๋น์ค ์์ฑ์ ์ํ yml ํ์ผ์์ฑ
vi my-flask-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: ์๋น์ค_์ด๋ฆ
spec:
selector: # ์ฐ๊ฒฐํ pod์ ์ด๋ฆ (labels)
app: ํ๋_์ด๋ฆ
ports:
- protocol: TCP
port: 5000
targetPort: 5000
type: NodePort
2. ์๋น์ค ์์ฑ (์ธ๋ถ ์ ๊ทผํฌํธ(NodePort) ํ์ธ)
kubectl apply -f my-flask-svc.yaml
kubectl get -f my-flask-svc.yaml
but ์์ง ๋ฌธ์ ๊ฐ ์๋ค.
0. ์ธ๊ทธ๋ ์ค ์ปจํธ๋กค๋ฌ ์ค์น (ingress-nginx)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.4/deploy/static/provider/baremetal/deploy.yaml
[ ์ธ๊ทธ๋ ์ค ์ค์น ํ์ธ ]
kubectl get namespaces
[ ์ต์ ๋ฒ์ ์ค๋ฅ์ญ์ ]
kubectl delete validatingwebhookconfiguration ingress-nginx-admission
1. ์ธ๊ทธ๋ ์ค ์ค์ ํ์ผ ์์ฑ
vi micro-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: micro-ingres
annotations: # nginx ํํ๋ก ingress๋ฅผ ์์ฑ?
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: my-flask.bar.com # ์ธ๋ถ์์ ์ ๊ทผํ ๋๋ฉ์ธ
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: my-flask-svc # ์๋น์ค์ ์ด๋ฆ์ผ๋ก ์๋ณ
port:
number: 5000
2. ์ค์ ํ์ผ ์ ์ฉ (ํฌํธํ์ธ)
kubectl apply -f micro-ingress.yaml
# ingress-controller ํฌํธ ํ์ธ
kubectl get all -n ingress-nginx
# ingress-controller ๋๋ฉ์ธ ํ์ธ
kubectl describe -f micro-ingress.yaml
3. ingress์ ๋๋ฉ์ธ๊ณผ ํฌํธ๋ก ์ ๊ทผํ๋ค.
4. ๋ก์ปฌ์ ํธ์คํธํ์ผ ๋ณ๊ฒฝ (๋ก์ปฌ์์ ์ ๊ทผ ํ ์คํธ)
sudo vi /etc/hosts
node์ธ์คํด์คip ์ธ๊ทธ๋ ์ค_๋๋ฉ์ธ
ELB ์์ฑ
๋ก๋๋ฐธ๋์ ์์ฑ
์ธ๋ฐ์ด๋: ๋ชจ๋ TCP
๋คํธ์ํฌ ์ค์ (๊ธฐ๋ณธ ์๋ธ๋ท 4๊ฐ ๋ชจ๋ ์ค์ )
ํ๊ฒ๊ทธ๋ฃน ์์ฑ
๋
ธ๋
์ธ์คํด์ค๋ฅผ ํ๊ฒ๊ทธ๋ฃน์ ์ถ๊ฐ
์์ฑํ ํ๊ฒ๊ทธ๋ฃน์ ELB์ ์ค์
ํ๊ฒ๊ทธ๋ฃน, ELB ์ํํ์ธ
ELB๊ฐ ํ์ฑํ ๋๋ค๋ฉด ์๋ํฌ์ธํธ๋ก ์ ๊ทผ. (404 ์๋ฌ๋ฐ์)
vi micro-ingress.yaml
์ผ๋จ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ด๋ค๊ฑด์ง ํ 2.5%์ ๋ ์ ๊ฒ ๊ฐ๋ค.
์ด๋ฒ ๊ธฐํ์ ๋คํธ์ํฌ CS ๊ณต๋ถ๋ฅผ ์กฐ๊ธ์ฉ ํด๋ด์ผ๊ฒ ๋ค.