☸️ Kubernetes

개인 PC에 Kubernetes 환경 설치

loose 2024. 1. 7. 03:06
반응형

운영 체제

안정성있는 ubuntu 20.04 설치(아 설치할 때 영어로 설치할걸... ui가 한글이 될거같아서 그런건데 너무 불편하네)

 

고정 IP 설정(마스터 노드만 진행함)


ubuntu 20.04 고정 IP(Static IP) 설정
ctrl alt t로 터미널 실행
sudo apt install net-tools
ifconfig | grep inet 현재 IP 확인 192.168.219.103
route -n 게이트웨이 ip 확인 192.168.219.1 게이트웨이가 연결된 NIC 정보도 확인 가능 enp1s0

 

 

방법1 이든 2든 무조건 설정해줘야하는 부분은

내부 IP 주소, 서브넷마스크, 게이트웨이 주소, 통신사 Nameserver다

앞에 3개는 명령어로 조회를 해봤는데 NameServer는 Ubuntu Desktop에 설정에 들어갔을 때 현재 네트워크가 DHCP로 설정된 경우에 Nameserver IP가 조회돼서 해당 NameServer IP를 고정 IP 입력할 때 넣어주면 된다.  

(또 내부 아이피를 192.168.219.110으로 했는데 안됐음 103으로 그냥 유지하니까 됨)

방법 1. UI로 고정 IP 설정


우분투 데스크탑에서 설정 -> 네트워크 -> Ipv4 들어가서 설정하면 됨

 

 

방법 2. 설정 파일 수정으로 고정 IP 설정

https://enowy.tistory.com/33

아래 위치에 파일을 열고 주석 후 아래 내용 추가
/etc/netplan/00-installer-config.yaml 

network:
  ethernets:
    enp1s0:  # !!!!!!!!!!!!확인한 NIC 정보!!!!!!!!!!!!!!!
      addresses: [192.168.219.103/24]  # IP 주소는 CIDR 표기법으로 기재한다. 잘 모르면 끝에 '/24' 기입한다.
      gateway4: 192.168.219.101  # 확인한 Gateway 정보
      nameservers:
        addresses: [61.41.153.2,1.214.68.2] # Name server 주소를 쉼표로 구분하여 원하는 순서로 기재한다.
  version: 2

 


sudo systemctl start systemd-networkd
sudo systemctl enable systemd-networkd
sudo netplan apply

 

SSH 설치


sudo apt update
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

 

vi및 vim 설치

 

apt update

apt install vim

 

이거 안하니까 vi 돌리면 화살표 기능이 이상하게 작동함

 

도커 설치


sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt install docker-ce docker-ce-cli containerd.io
sudo docker version
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker

 

쿠버네티스 설치


https://confluence.curvc.com/pages/viewpage.action?pageId=98048155

각 노드 마다 실행


sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab

hostnamectl set-hostname k8s-master

참고
$ hostnamectl set-hostname k8s-node01
$ kubeadm rejoin
이렇게 하면 기존 노드 이름 변경도 가능 

 

(전체 복사해서 붙여 넣기만 하면됨)
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
EOF

sudo sysctl --system

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

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
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

 

위 명령어는 공식 가이드 문서에 있는거지만 2023년 이후로 막힘

위 명령어 입력 후 apt update 하면

GPG error public key is not available: NO_PUBKEY B53DC80D13EDEF05

위와 같은 에러가 발생한다.

 

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://dl.k8s.io/apt/doc/apt-key.gpg
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


# sudo apt-get update -y
# sudo apt-get install -y kubelet kubeadm kubectl
# sudo apt-mark hold kubelet kubeadm kubectl

# sudo systemctl enable kubelet
# sudo systemctl restart kubelet

 

마스터 노드 설정

 

sudo kubeadm init

근데 아래와 같이 에러 뜸 

W1125 12:58:32.733485   26426 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.19.4
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR CRI]: container runtime is not running: output: time="2020-11-25T12:58:32Z" level=fatal msg="getting status of runtime failed: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
, 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
user@k8s-master:~/$ sudo rm /etc/containerd/config.toml
user@k8s-master:~/$ sudo systemctl restart containerd

 

user@k8s-master:~/$ sudo kubeadm init

init이 성공적이라면 아래와 같이 토큰 값 내뱉음(이걸 워커 노드에 그대로 입력하면 됨)

추후에 워커노드 더 추가하고 싶으면 kubeadm kubectl 설치하고 아래 토큰 그대로 복붙하면 될듯

마스터노드는 무조건 고정 ip써야겠네..

sudo kubeadm join 192.168.219.103:6443 --token yjrzlz.0lr5dfb82u01m90u \
        --discovery-token-ca-cert-hash sha256:dc6bcba93353de37c185f4c5666c86e46c5e85530ac1f149582e59d11330fda1

 

아래 명령어는 kubectl 명령어를 쓰기 위해서 적어줘야한다.

처음엔 내 계정으로 접속해서 아래 명령어를 치면 된다.

그리고 root 계정에도 아래 명령어를 똑같이 입력해줘야함. 그래야 root에서도 k get pod가 됨.

 

sudo passwd root
su -

참고로 /.kube에서 .은 숨겨진 폴더라는 뜻이다.

$HOME은 자기만의 계정 홈 디렉토리를 말하는거라 각각 계정에 .kube 폴더를 만들어줘야한다.

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

 

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s-1.11.yaml

Unable to connect to the server: dial tcp: lookup cloud.weave.works on 127.0.0.53:53: no such host

위 명령어 뜨면 인터넷 안되는 거임 127.0.0.53은 DNS 서버주소

 

워커 노드 설정

위의 토큰 그대로 복붙

 

마스터 노드 설정 마무리

tab으로 자동완성 기능

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

 vi ~/.bashrc

alias k='kubectl'
alias kd='kubectl describe'

 

워커 노드 설정 마무리


추후에 마스터 노드에서 ssh로 워커 노드에 접근하고 싶은 경우

일반 계정은 되는데 root 계정은 접근이 안될 수 있다.

sudo vi /etc/ssh/sshd_config

위의 파일을 열어서 

PermitRootLogin yes

를 넣어주면 된다.

CNI 설치하기

 

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml


curl -L https://github.com/projectcalico/calico/releases/download/v3.24.5/calicoctl-linux-amd64 -o calicoctl
chmod 700 calicoctl
sudo mv calicoctl /usr/bin/

 

 

 

728x90