개인 PC에 Kubernetes 환경 설치
운영 체제
안정성있는 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 설정
아래 위치에 파일을 열고 주석 후 아래 내용 추가
/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.gpgecho "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/