JINIers
centos에 k8s 설치 본문
CentOS 7에 k8s 설치(on-prem)
master node / work node 설치방법은 동일하나 init 후 는 약간 다름
작성은 마스터노드 기준으로 하였다.
* 맨 아래는 init 시 발생하는 에러에 관한 트러블슈팅 방법 작성
K8S install(master,work node 공통 실행)
selinux 종료
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
swap 기능 off
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
swapoff -a
방화벽 끄기
systemctl disable firewalld
systemctl stop firewalld
netfilter 설정
cat <<EOF>> /etc/modules-load.d/k8s.conf
br_netfilter
EOF
하고 꼭 ls나 cat으로 만들어졌는지 확인
config 파일 설정
cat <<EOF>> /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
host 파일에 node 등록
vi /etc/hosts
192.168.100.35 master-song
192.168.100.36 work-song
시스템 업데이트(좀 걸린다.)
yum update -y
repo 설정변경
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
docker 설치
curl -s https://get.docker.com | sudo sh
systemctl enable docker
systemctl start docker
docker deamon 설정 변경
* 처음엔 cgroup = cgroup 으로 되어있으나 이걸 systemd 로 변경해준다.
cat <<EOF>> /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
변경 후에 꼭 재시작 해준다.
service docker restart
변경 확인
docker info | grep -i group
k8s 설치
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernets
** kubelet 과 kubeadm은 충돌이 잘 난다.
그럴땐 당황하지 말고 kubelet을 지웠다가 재설치한다.
#kubelet 제거
yum remove kubelet
# kubelet 재설치
yum install kubeadm -y
kubeconfig 변수지정
export KUBECONFIG=/etc/kubernetes/admin.conf
master-node / work-node 공통 설치는 여기까지
아래로는 master와 work를 나눴다.
master-node install 마무리
kubeadm init
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=[마스터노드 ip 입력]
마스터 노드에 뜬 빨간 부분을 그대로 복사해서 적용한다.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
혹시 모르니 변수지정을 한번 더 해준다.
export KUBECONFIG=/etc/kubernetes/admin.conf
k8s 네트워크 플러그인 설치(23년 01월 기준)
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s-1.11.yaml
* k8s 전용 네트워크 플러그인을 설치해주지 않으면 get node 했을 시 status가 Not Ready에서 Ready로 바뀌지 않으므로 꼭 설치해준다.
work-node install 마무리
마스터노드에서 나온 토큰을 복사해서 입력한다.(노란부분)
그럼
get node 해보라고 하는데 master node에서 work-node가 붙은 것을 확인할 수 있다.
kubeadm init 시 error에 관한 방법
error 1.
마스터노드에서 kubeadm init을 하면 에러가 자주난다.
보통
[init] Using Kubernetes version: v1.26.0
[preflight] Running pre-flight checks
[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: E0104 23:33:51.790539 54280 remote_runtime.go:948] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
time="2023-01-04T23:33:51-05:00" level=fatal msg="getting status of runtime: 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
이런 에러가 자주 날것
그럴땐 당황하지 말고 restart를 해주면 된다.
systemctl restart containerd
systemctl restart docker
restart 후 상태 확인 꼭 해주고
systemctl status containerd
systemctl status docker
그 뒤에 다시 init 하면 됨
error 2
containerd config default | tee /etc/containerd/config.toml 관한 에러
컨테이너 관련해서
containerd config default | tee /etc/containerd/config.toml
어쩌고 에러가 뜰 수 있다.
그럴 땐 파일을 지워주자.
rm /etc/containerd/config.toml
error 3.
W0104 23:28:09.805820 54067 cleanupnode.go:134] [reset] Failed to evaluate the "/var/lib/kubelet" directory. Skipping its unmount and cleanup: lstat /var/lib/kubelet: no such file or directory 에러
kubeadm reset을 하다보면 kubelet 파일이나 디렉토리가 없다고 한다.
쿨하게 지워주자
yum remove kubelet
그리고 다시 설치하자
yum install kubeadm
error 4.
kubelet service disable
[preflight] Running pre-flight checks
[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: E0111 20:33:46.955031 54651 remote_runtime.go:948] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"
time="2023-01-11T20:33:46-05:00" level=fatal msg="getting status of runtime: 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
대충 이런 에러가 발생했을 때
systemctl enable kubelet.service
'공부 > Docker&K8S' 카테고리의 다른 글
클라우드 네이티브 구성요소 (0) | 2023.02.07 |
---|---|
CI/CD jenkins pipeline restart error (0) | 2023.02.02 |
Hyper-V를 이용한 CentOs 설치 (0) | 2023.01.05 |
볼륨마운트하여 jupyter lab 서비스 구축 (0) | 2022.12.28 |
Docker 기초 & 기본 명령어 (0) | 2022.12.28 |