쿠버네티스는 그리스어로 조타수라는 의미를 가지고 있다.
쿠버네티스 기초 설정
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 |