쿠버네티스 (ubuntu20.04.vmx 환경)

신상우·2023년 12월 28일

쿠버네티스

목록 보기
12/26

구글클라우드 에서 진행

구글 GKE 클러스터
https://console.cloud.google.com/kubernetes/list/overview?authuser=1&project=shinsang-2023-12-26

1. Kubernetes Engine 클러스터 생성 - 공부용으로 표준 모드로 진행

2. 클러스터 생성후 VM 열어 톰캣 설치(CLOUD SHELL)

a. 클러스터 연결 해서 (ex-gcloud container clusters get-credentials 	cluster-1 --zone us-central1-c --project shinsang-2023-12-26)후
b. kubectl get nodes 노드수 확인가능
c. kubectl create deploy tc --image=consol/tomcat-7.0 --replicas=5
d. kubectl expose deploy tc --type=LoadBalancer --port=80 --target-port=8080
e. kubect1 get pods,svc
	1. EXTERNAL-IP 로 접속후 
    2. SERVER STATUS에 접속 아이디,비번: admin 둘다같음
    3. 로드 밸런싱되고있음 확인
f. kubectl get pods -owide      node가 어디 배치됬는지 알수있음 

3. Compute Engine 에서 VM 인스턴스 생성

a. master-1 생성 (us-west1, cpu2개, 메모리4gb, ubuntu20.04)
b. worker-1 생성 (us-west1, cpu2개, 메모리4gb, ubuntu20.04)
c. worker-2 생성 (us-west1, cpu2개, 메모리4gb, ubuntu20.04)
d. ping ip로 내부ip로 확인

4. 입력 모두

sudo swapoff -a # 현재 시스템에 적용(리부팅하면 재설정 필요)
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 리부팅 필수

5. 컨테니어 런타임 구성

# Using Docker Repository
sudo apt update
sudo apt 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

# containerd 설치
sudo apt update
sudo apt install -y containerd.io
# sudo systemctl status containerd # Ctrl + C를 눌러서 나간다.

# Containerd configuration for Kubernetes
cat <<EOF | sudo tee -a /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
EOF

sudo sed -i 's/^disabled_plugins \=/\#disabled_plugins \=/g' /etc/containerd/config.toml
sudo systemctl restart containerd

# 소켓이 있는지 확인한다.
ls /var/run/containerd/containerd.sock

6. 설치

sudo mkdir /etc/apt/keyrings

cat <<EOF > kube_install.sh
# 1. apt 패키지 색인을 업데이트하고, 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치한다.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

# 2. 구글 클라우드의 공개 사이닝 키를 다운로드 한다.
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

# 3. 쿠버네티스 apt 리포지터리를 추가한다.
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 4. apt 패키지 색인을 업데이트하고, kubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정한다.
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
EOF

sudo bash kube_install.sh

kubeadm version

이전에 안됬던 이유!

기존 스크립트에서 인증 관련 데이터를 '/etc/apt/keyrings'폴더에 저장하는 것으로 변경되었습니다. 강의에서 실습하는 Ubuntu 22.04 이전 환경에는 default로 '/etc/apt/keyrings' 폴더가 없어 직접 만들어 줘야 인증 키를 받을 수 있습니다.

7. 넷필터 브릿지 설정

docker.io 설치 하면 되는거지만
kubeadm.io 를해서 따로 설정 해줘야함
sudo -i

modprobe br_netfilter
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

exit

8. 마스터 노드 에만 init

sudo kubeadm init
성공후 메세지 중에

mkdir -p $HOME/.kube

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

복붙 후 kubectl get nodes 하면 조회가능

9. 워커 노드 조인

kubeadm join 10.138.0.2:6443 --token 3hjfq1.rhda22sbbxwt3msd \
    --discovery-token-ca-cert-hash sha256:e0fbf17abccfed4475f45760e6f596df30b280f730f519784d1b943baca52ca9
  sudo 붙이고 이렇게 조인 복사해서 워커에 넣기 후
  마스터노드에서 kubectl get nodes 해서 연결확인
  

token 재발급 받는 방법 (마스터 노드에서 실습)

  • 토큰 리스트 확인하기: sudo kubeadm token list
  • 토큰 재발급하기: sudo kubeadm token create --print-join-command

10. https://kubernetes.io/docs/concepts/cluster-administration/addons/

내용중 이링크를 하나 알려줌 들어가보면
에드온 을 설치해야함!
많이 쓰는 3개는 Calico, Cilium, Weave-Net 중선택 뭘쓰든 상관없음

Cilium 사용할 예정

https://kubernetes.io/docs/tasks/administer-cluster/network-policy-provider/cilium-network-policy/

curl -LO https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz
cilium install

kubectl get nodes 확인
cilium status 확인

11. 톰캣 접속 확인

  1. kubectl create deploy tc --image=consol/tomcat-7.0 --replicas=5
  2. kubectl expose deploy tc --type=NodePort --port=80 --target-port=8080
  3. kubectl get pod,svc
  4. curl 내부ip:(port:이포트번호) ex) curl 10.138.0.2:31013, 노드다 확인
    30000~32767 랜덤으로 할당됨

-------------------------------

VMware

1단계 노드준비

https://www.vmware.com/kr/products/workstation-pro/workstation-pro-evaluation.html
여기서 프로 다운로드
https://gist.github.com/PurpleVibe32/30a802c3c8ec902e1487024cdea26251
여기서 키 무료? 잘모르겠음
실행후

master-1 , worker-1, worker-2 3개 ubuntu20.04.vmx 다 따로 vmware로 킨다음 로그인후

ip addr로 아이피 확인후 이름 에 표시 해주기
ping ip로 핑통신 확인해보고
sudo hostnamectl set-hostname master-1 이름 변경 알아보기 쉽게
sudo reboot
한후 powershell 에서 ssh user01@192.168.201.129 접속

공식문서
https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

1. 입력 모두

sudo swapoff -a # 현재 시스템에 적용(리부팅하면 재설정 필요)
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 리부팅 필수

2. 컨테니어 런타임 구성

# Using Docker Repository
sudo apt update
sudo apt 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

# containerd 설치
sudo apt update
sudo apt install -y containerd.io
# sudo systemctl status containerd # Ctrl + C를 눌러서 나간다.

# Containerd configuration for Kubernetes
cat <<EOF | sudo tee -a /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
EOF

sudo sed -i 's/^disabled_plugins \=/\#disabled_plugins \=/g' /etc/containerd/config.toml
sudo systemctl restart containerd

# 소켓이 있는지 확인한다.
ls /var/run/containerd/containerd.sock
sudo swapoff -a # 현재 시스템에 적용(리부팅하면 재설정 필요)
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 리부팅 필수
sudo mkdir /etc/apt/keyrings

cat <<EOF > kube_install.sh
# 1. apt 패키지 색인을 업데이트하고, 쿠버네티스 apt 리포지터리를 사용하는 데 필요한 패키지를 설치한다.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

# 2. 구글 클라우드의 공개 사이닝 키를 다운로드 한다.
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg

# 3. 쿠버네티스 apt 리포지터리를 추가한다.
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 4. apt 패키지 색인을 업데이트하고, kubelet, kubeadm, kubectl을 설치하고 해당 버전을 고정한다.
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
EOF

sudo bash kube_install.sh

오류발생

user01@master-1:~$ sudo apt update
Err:1 http://kr.archive.ubuntu.com/ubuntu focal InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Err:2 http://kr.archive.ubuntu.com/ubuntu focal-updates InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Err:3 http://kr.archive.ubuntu.com/ubuntu focal-backports InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Err:4 http://kr.archive.ubuntu.com/ubuntu focal-security InRelease
  Temporary failure resolving 'kr.archive.ubuntu.com'
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/focal/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/focal-backports/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Failed to fetch http://kr.archive.ubuntu.com/ubuntu/dists/focal-security/InRelease  Temporary failure resolving 'kr.archive.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

vi /etc/
nameserver 127.0.0.53
options edns0
search localdomain

3.

https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
에서
kubeadm 설치 링크 랑 위 비교 해봐야함!

후 kubeadm version 하면 뜸

sudo -i 로 들어가서
modprobe br_netfilter
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
exit로 빠져나옴

2단계 클러스터 구성

마스터 노드
sudo kubeadm init 깃발 꼽기

오류 발생

 user01@master-1:/$ sudo kubeadm init
I1227 06:07:24.328395   16933 version.go:256] remote version is much newer: v1.29.0; falling back to: stable-1.28
[init] Using Kubernetes version: v1.28.5
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR CRI]: container runtime is not running: output: E1227 06:07:24.920644   16941 remote_runtime.go:616] "Status from runtime service failed" err="rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/containerd/containerd.sock: connect: no such file or directory\""
time="2023-12-27T06:07:24Z" level=fatal msg="getting status of runtime: rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial unix /var/run/containerd/containerd.sock: connect: no such file or directory\""
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher

구글링 후
https://github.com/containerd/containerd/issues/8139
에서 /etc/containerd/config.toml 이 있어야하는데 나의경우 파일 자체가 없어서 mkdir containerd 로 만들고 vi config.toml
로 들어가서 insert로

root@ubuntu:/etc# cat /etc/containerd/config.toml
#   Copyright 2018-2022 Docker Inc.

#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at

#       http://www.apache.org/licenses/LICENSE-2.0

#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

enabled_plugins = ["cri"]
[plugins."io.containerd.grpc.v1.cri".containerd]
  endpoint = "unix:///var/run/containerd/containerd.sock"


#root = "/var/lib/containerd"
#state = "/run/containerd"
#subreaper = true
#oom_score = 0

#[grpc]
#  address = "/run/containerd/containerd.sock"
#  uid = 0
#  gid = 0

#[debug]
#  address = "/run/containerd/debug.sock"
#  uid = 0
#  gid = 0
#  level = "info"
root@ubuntu:/etc#

추가 해주고 다시 sudo kubeadm init 하니 해결

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

kubectl get nodes

마스터 하나만뜸

kubeadm join 192.168.102.128:6443 --token 5456yf.534bp2k6ogidvwyt--discovery-token-ca-cert-hash sha256:8929ce646fb6a6db05ea2db3918a457c0b3c55a3027814c8dc421dbac3008e5f

join 오류 남

------------- 중단-------------

비용 나가니 클러스터 삭제 !!!!

sudo kubeadm init 마스터 노드에서만 수행!!
sudo kubeadm reset init,join 을 잘못했을경우 초기설정

profile
기록 남기기

0개의 댓글