본문 바로가기

AWS Cloud School

[06.24] Kubernetes 기초(로컬 클러스터 구성)

 

<명령어 정리>

 

kubectl get pod ->팟의 정보확인.  api 요청이 제대로 들어갔는지도 확인 가능하다.(No resources가 뜨면 잘 들어간 것!)
kubectl get nodes - 노드들의 상태 확인
kubectl apply -f <메니페스트파일> - 생성, 동작, 변경사항 반영.
kubectl run <pod이름> --image=<이미지이름:버젼> - 팟 구동
kubectl get pod -o wide - 자세한 팟의 정보 확인
kubectl describe pod test-pod - 완전 자세한 팟의 정보 확인
kubectl run <pod이름> --image=<이미지이름:버젼> --dry-run=client -o yaml - 여기서 --dry-run-client의 의미는 실제로 api요청은 하지 않고 실행되는지 여부만 확인하겠다는 의미이다.
kubectl apply -f <파일이름.yml> - 팟 생성
kubectl delete -f <파일이름.yml> - 팟 삭제
kubectl exec -it <팟 이름> -- /bin/bash - 팟 안으로 진입
kubectl get pod --watch - 팟의 상태를 실시간으로 조회

kubectl get pod -n <네임스페이스> - 해당 네임스페이스에 대한 팟의 상태를 조회

kubectl get pod --all-namespaces - 모든 네임스페이스를 전부 조회

kubectl delete ns <네임스페이스> - 네임스페이스 삭제

kubectl create ns <네임스페이스> - 네임스페이스 생성

 

 

 

디스크확장

root@ubuntem:~# vgextend ubuntu-vg /dev/sdb

 

root@ubuntem:~# lvextend -l +100%FREE -n /dev/mapper/ubuntu--vg-ubuntu--lv

 

root@ubuntem:~# resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

 

root@ubuntem:~# hostnamectl set-hostname master

root@ubuntem:~# vi /etc/netplan/00-installer-config.yaml

# ip를 211.183.3.10 /24 으로 하자

 

클러스터 공통 설정

이미지 관리를 위해서 docker를 설치하자

curl -fsSL https://get.docker.com -o get-docker.sh

sudo sh get-docker.sh

# 오로지 이미지 관리를 위한 목적.

 

 

1.네트워크 설정.

# 쿠버네티스에 필요한 필수포트를 오픈하거나 방화벽을 비활성화한다.

modprobe overlay

 

modprobe br_netfilter

#모듈을 불러오는 명령어

 

tee /etc/sysctl.d/kubernetes.conf<<EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

EOF

 

sudo tee /etc/modules-load.d/containerd.conf <<EOF

overlay

br_netfilter

EOF

 

# 리눅스의 네트워크 관련 모듈 로드.

 

sysctl --system
# 위 설정값 반영

 

 

 

2.가상메모리 사용 금지

 

sed -i '/^\/swap.img/s/^/#/' /etc/fstab

# /etc/fstab에서 /swap.img를 #/swap.img으로 변경. 그냥 파일에 들어가서 # 을 추가해줘도 된다.



3.CRI(Container Runtime Interface) 설치 - containerd

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# gpg 다운로드.

 

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 레포지토리에 목록 추가

 

apt-get update

# 레포 업뎃.

apt-get install -y containerd.io

mkdir -p /etc/containerd

containerd config default>/etc/containerd/config.toml

# containerd의 설정파일.

 

root@master:~# systemctl restart containerd

root@master:~# systemctl enable containerd

 

4.쿠버네티스 v1.30 설치(kubectl, kubelet, kubeadm)

https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

# 공식 문서.

apt-get update

 

apt-get install -y apt-transport-https ca-certificates curl

 

mkdir -p /etc/apt/keyrings

# 혹시 위 디렉토리가 없다면 만들어준다.

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# gpg키

 

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 레포 목록 추가

 

apt-get update

# 레포 목록 업뎃

apt-get install -y kubelet kubeadm kubectl

apt-mark hold kubelet kubeadm kubectl

# # 3명령어 설치 후 추후에 새로운 버전이 나와도 업데이트 되지 않도록 버전 고정.

 

systemctl restart kubelet

systemctl enable kubelet

 

 

 

kubeadm config images pull --cri-socket unix:///run/containerd/containerd.sock --kubernetes-version v1.30.2

 

https://github.com/kubernetes/kubernetes/releases

# 버전형식. v.1.xx.xx 설치하고 싶은 버전에 대한 정보를 알 수 있는 페이지

 

마스터노드로 초기화

 

kubeadm init --pod-network-cidr=10.244.0.0/16 --upload-certs --kubernetes-version=v1.30.2  --cri-socket unix:///run/containerd/containerd.sock --ignore-preflight-errors=all

 

 

 

 

 

 

kubeconfig

 

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 디렉토리를 만들어서 admin.conf 파일을 홈디렉토리의 .kube 디렉토리에 config라는 이름의 파일로 변경.

 

 

 

 

 https://github.com/coreos/flannel/raw/master/Documentation/kube-flannel.yml

 

 

워커노드에서만

 

kubeadm join 211.183.3.10:6443 --token 5tzav6.xu34ykuwthrg427l --discovery-token-ca-cert-hash sha256:392ea4312ac0cf0d21866554a31cf52315771e0fd080a3f9223bf92ab3aa23c9 --cri-socket unix:///run/containerd/containerd.sock 

# 본인의 master노드에서 생성된 명령어를 입력하세요.

 

chown $(id -u):$(id -g) $HOME/.kube/config

 

 

 

 

kubectl 명령 자동완성

apt-get install bash-completion

echo 'source <(kubectl completion bash)' >>~/.bashrc

echo 'source <(kubeadm completion bash)' >>~/.bashrc

kubectl completion bash >/etc/bash_completion.d/kubectl

#자동완성

 

ln -s /usr/bin/kubectl /usr/local/bin/k

# kubectl 대신 k로 단축명령

 

 

 

 

root@master:/k8s/rep# cat easy.yml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: easy-rep
spec:
  replicas: 3
  selector:
    matchLabels:
      app: easy
  template:
    metadata:
      labels:
        app: easy
    spec:
      containers:
      - name: easy-con
        image: oolralra/easy:1