Kubernetes

23.8.25(금) 쿠버네티스 1일차

사실 나도 모름 2023. 9. 1. 15:16

쿠버네티스는 그리스어로 조타수라는 의미를 가지고 있다.

쿠버네티스 기초 설정

 

1. 호스트 이름 변경
master, node1, node2, node3


2. 각 IP는 다음과 같다.
192.168.108.20/24 master
192.168.108.21/24 node1
192.168.108.22/24 node2
192.168.108.23/24 node3

 

3. root 암호 설정]

echo -e 'root:dkagh1.\nroot:dkagh1.' | chpasswd

 

4. LVM으로 디스크 확장 (생략가능)

pvcreate /dev/sdb
vgextend ubuntu-vg /dev/sdb
lvextend -l +100%FREE -n /dev/ubuntu-vg/ubuntu-lv

# 사이즈 재조정
resize2fs /dev/ubuntu-vg/ubuntu-lv
fdisk -l
ls /dev/sd?
pvcreate /dev/sdb
pvscan
vgcreate LVM_VG /dev/sdb
vgdisplay
lvcreate -l 100%FREE -n LVM1 LVM_VG
# lvcreate -L 20G -n LVM2 LVM_VG
lvscan
vgdisplay
mkfs.ext4 /dev/LVM_VG/LVM1
# mkfs.ext4 /dev/LVM_VG/LVM2
vgdisplay
tune2fs -L LVM1 /dev/LVM_VG/LVM1
# e2label /dev/LVM_VG/LVM2 LVM2
vi /etc/fstab
mkdir /lv1
mount -a
df -Th

 

5. IP와 Hostname변경

패스워드 인증 및 루트 로그인을 허용

sudo sed -i -e '$i192.168.108.20     master  master.k8s.local' \
-e '$i192.168.108.21   node1  node1.k8s.local' \
-e '$i192.168.108.22   node2  node2.k8s.local' \
-e '$i192.168.108.23   node3  node3.k8s.local' /etc/hosts

sudo sed -i -e 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' \
-e 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config;

systemctl restart sshd.service
	
systemctl status ufw
systemctl stop ufw

 

6. 키 생성 및 모든 노드에게 키 전송

ssh-keygen -t rsa

rm -f /home/ubuntu/.ssh/authorized_keys

for i in {1..3..1}; do sudo ssh-copy-id -i .ssh/id_rsa ubuntu@node$i.k8s.local; done;

for i in {1..3..1}; do scp /etc/hosts node$i:/etc/hosts; done;

 

7. 모든 노드에서 swap 중지 및 fstab 수정

sudo swapoff -a

sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

 

8. master 노드에서만 입력

sudo -i

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
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system

sudo -i

modprobe overlay
modprobe br_netfilter

 

9. 모든 노드에서

sudo -i

sudo apt-get update

sudo apt-get install -y \
    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=$(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
  
  
sudo apt-get update -y 
sudo apt-get install -y docker-ce docker-ce-cli containerd.io


sudo systemctl enable --now docker

sudo systemctl enable --now containerd

docker version
sudo -i

sudo mkdir /etc/docker
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

sudo systemctl enable --now docker
sudo systemctl daemon-reload
sudo systemctl restart docker  

# 변경된 cgroup driver 확인
sudo docker info | grep -i cgroup
sudo -i

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

apt-get update -y 

apt-get install -y kubelet kubeadm kubectl


sudo apt-mark hold kubelet kubeadm kubectl # ⇒자동으로 업데이트 되지 않도록 패키지 버전을 고정


sudo systemctl enable --now kubelet # ⇒ 큐브 렛 활성화


rm -rf /etc/containerd/config.toml
systemctl restart containerd

 

10. master 노드에서만

sudo -i

kubeadm init --pod-network-cidr=10.11.0.0/16 --apiserver-advertise-address=192.168.108.20

ㅇkubeadm token create --print-join-command > ~/token

a="yes" ; for num in {1..3..1}; do echo $a | scp token node$num:/root/; done; 

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

apt install bash-completion -y
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.1/manifests/tigera-operator.yaml

wget https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/custom-resources.yaml

sed -i 's/192.168.0.0\/16/10.11.0.0\/16/' custom-resources.yaml

kubectl create -f custom-resources.yaml



# 확인하는 방법
kubectl get pods -A

kubectl get nodes

 

11. 모두 다 running 상태가 되면
worker 노드에서만

sudo -i

bash token

 

12. 안되면 다시 처음부터 천천히 다시 해보면 됨

 


실습

vi .bash_aliases
	alias k='kubectl'

source .bash_aliases

k cluster-info

k get ns # 네임스페이스
# k get namespaces

k get pod -n default # default pod 정보
k get pod -A # 모든 pod 정보

k api-resources # 모든 리소스

k get svc # 실행중인 서비스

### kubectl --help 하면 아래 명령들이 예시로 다 나옴 

k run ????? # 특정 이미지를 생성하고 실행하고 싶을 때 사용
# kubectl run nginx --image=nginx # pod nginx가 생성되고 실행됨
k get pods # 실행중인 pod 표시
k get pods --help
# [] 생략가능
# [--port]는 포트번호 [--env]는 환경변수 [--labels]는 그냥 태그같은 거
# [--dry-run-server|client] : 앤서블의 -C처럼 시뮬레이션 해볼 수 있는 명령
# [--overrides] : 다른 명령보다 우선 시 할 수 있는 명령
# [--restart=never] : foreground 상태에서 유지하고 싶을 때 재시작하고 싶지 않을 때
# [--command] -- <cmd> : 컨테이너에 시스템 커맨드를 넣고 싶을 때

# kubectl run hazelcast --image=hazelcast/hazelcast --port=5701
k get pods

# kubectl run nginx --image=nginx --dry-run=client
# kubectl run -i -t busybox --image=busybox --restart=Never

kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml
wget https://k8s.io/examples/controllers/nginx-deployment.yaml
cat nginx-controller.yaml

 

'Kubernetes' 카테고리의 다른 글

23.9.4(월) 쿠버네티스 7일차  (0) 2023.09.04
23.9.1(금) 쿠버네티스 6일차  (0) 2023.09.01
23.8.28(월) 쿠버네티스 2일차  (0) 2023.09.01
23.8.29(화) 쿠버네티스 3일차  (0) 2023.09.01
23.8.30(수) 쿠버네티스 4일차  (0) 2023.09.01