Run The Bridge

kubernetes install guide(v1.18.6) 본문

Cloud/k8s

kubernetes install guide(v1.18.6)

anfrhrl5555 2021. 12. 12. 15:06
728x90
반응형

교육 들으면서 쿠버네티스 관련 내용은 많이 적은 거 같은데, 정작 중요한 설치 가이드가 없었다.

 

그래서 복습 겸 설치도 중요하니까 이렇게 설치 가이드 게시글을 만들어본다.

 

우리는 Master 1대, Worker 1대로 구성한다.(CPU 2 core, RAM 2GB, HDD: 100GB)

 - master: 192.168.200.14

 - worker: 192.168.200.15

 

우선 Centos7 기준으로 설치해주면 된다.

kubernetes

설치중...

 

1. hostname 변경

hostnamectl set-hostname kube-master

 

2. /etc/hosts 변경(Node 간 통신을 위해 hosts에 정의해준다.)

192.168.200.14 kube-master
192.168.200.15 kube-worker

 

3. docker install

yum install -y net-tools
yum install -y telnet
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce-19.03.5 docker-ce-cli-19.03.5 docker-ce-rootless-extras-19.03.5
systemctl start docker
systemctl enable docker

 

docker start, enable이 끝나면 docker 명령을 쳤을 때 다음과 같이 볼 수 있다.

root@localhost ~ # docker

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/root/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker
                           context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  engine      Manage the docker engine
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker COMMAND --help' for more information on a command.

 

4. kubernetes install(kubeadm 이용)

 4-1. selinux 설정 permissive로 변경

setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

 

 

 4-2. iptables 설정

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
root@localhost ~ # sysctl --system
* Applying /usr/lib/sysctl.d/00-system.conf ...
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
kernel.yama.ptrace_scope = 0
* Applying /usr/lib/sysctl.d/50-default.conf ...
kernel.sysrq = 16
kernel.core_uses_pid = 1
kernel.kptr_restrict = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.promote_secondaries = 1
net.ipv4.conf.all.promote_secondaries = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /usr/lib/sysctl.d/60-libvirtd.conf ...
fs.aio-max-nr = 1048576
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/k8s.conf ...
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
* Applying /etc/sysctl.conf ...

 

4-3. firewalld 비활성화

systemctl stop firewalld
systemctl disable firewalld

 

 4-4. 스왑 오프

swapoff -a

 

 4-5.  vi /etc/fstab 파일 주석처리

 

 4-6. 재부팅

reboot

 

 

여기까지 하고 나서 Clone을 떠서 worker도 만들어준다.

 

나는 미리 만들어둔 kubernetes.master 와 kubernetes.worker 디렉터리를 이용하였다.

 

Clone 방식은 Full Clone을 선택

 

master, worker를 부팅시켜준다.

 

그리고 worker는 IP가 master랑 똑같기 때문에 사전에 정의한 IP로 바꿔준다.

 

추가로 hostname도 worker로 바꾼다.

 

 4-7. kubernetes yum repository 설정(master, worker 둘 다 입력)

cat <<EOF > /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
exclude=kube*
EOF

 

 4-8. kubeadm install(master, worker 둘 다 입력)

yum install -y kubelet-1.18.6 kubeadm-1.18.6 kubectl-1.18.6 --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet

 

 4-9. kubernetes Cluster 초기화(노드의 IP대역과 충돌 나지 않게 적절히 변경), (master에서 입력)

kubeadm init --pod-network-cidr=100.200.0.0/16

 

설치가 끝나면 다음과 같이 Cluster에 들어올 수 있는 token 값이 주어지는데 이 값을 worker에서 써주면 된다.

kubeadm join 192.168.200.14:6443 --token astnqi.unqeh133nl7q6vil \
    --discovery-token-ca-cert-hash sha256:341b3c1ac9abfc67517c86427bf169fbec3648be1bad249ace37686c76c78e0b

 

 4-10. kubernetes worker node 추가(worker에서만 입력)

kubeadm join 192.168.200.14:6443 --token astnqi.unqeh133nl7q6vil \
    --discovery-token-ca-cert-hash sha256:341b3c1ac9abfc67517c86427bf169fbec3648be1bad249ace37686c76c78e0b

 

만약 토큰값을 실수로 넘어가버리면 다음을 따라하면 확인할 수 있다.

# 1) master Node에서 실행
kubeadm token list

 

# 2) 1번을 실행했을 때 값이 없으면 실행
kubeadm token create

 

#3) Hash 확인
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

 

# 4) Join
kubeadm join <Kubernetes API Server:PORT> --token <2. Token 값> --discovery-token-ca-cert-hash sha256:<3. Hash 값>

 

<Kubernetes API Server:PORT>는 다음 명령을 통해 알 수 있다.

kubectl get endpoints

 

 4-11. (master에서 다음 실행)

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

 

※ 4-11까지 진행 후 서버 재부팅하면 안 됩니다.

 


kubernetes를 쓰다 보면 docker hub에서 image를 가져오는 경우가 많다.

 

무료 계정을 쓰면 image pull에 제한이 걸리는데, docker hub 계정을 통해 image pull 횟수를 늘린다.

 

사전에 docker hub에서 만들어두어야 한다.

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your teams' container applications.

hub.docker.com

(master에서 진행한다.)

docker login
kubectl create secret generic registry-auth -n kube-system --from-file=.dockerconfigjson=/root/.docker/config.json --type=kubernetes.io/dockerconfigjson
kubectl patch serviceaccount default  -n kube-system -p '{"imagePullSecrets": [{"name": "registry-auth"}]}'


 

5. Container Network addon install(calico), (master에서 실행)

 ※ 4-9에서 IP대역을 변경했다면, calico.yaml에서도 동일하게 변경해주어야 함

curl -O https://docs.projectcalico.org/manifests/calico.yaml

 

5-1. calico.yaml 파일에서 다음 부분 수정

# vi calico.yaml
1) CIDR을 9)번 과정에서 했던 IP대역으로
            - name: CALICO_IPV4POOL_CIDR
              value: "100.200.0.0/16"

2) 이미지 Pull 시크릿 적용
## calico.yaml 파일에서 containers: 로 검색하여 두 곳에 다음 두 라인 추가
      imagePullSecrets:
      - name: registry-auth

예)
      imagePullSecrets:
      - name: registry-auth
      containers:

      imagePullSecrets:
      - name: registry-auth
      containers:

수정 및 추가가 끝났으면 calico.yaml 파일을 실행시켜준다.

kubectl apply -f calico.yaml

 

apply를 했을 때, 다음과 같이 184번째에 '-' char 오류가 뜰 수 있는데, CIDR에 IP를 정의해주는 부분에 띄어쓰기가 한 칸 더 많다. 그 부분을 지우면 정상 작동한다.

root@kube-master ~ # kubectl apply -f calico.yaml
configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
error: error parsing calico.yaml: error converting YAML to JSON: yaml: line 184: did not find expected '-' indicator

 

사진과 같이 line을 맞춰주면 오류 없이 apply 된다.

configmap/calico-config unchanged
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org configured
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org configured
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers unchanged
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers unchanged
clusterrole.rbac.authorization.k8s.io/calico-node unchanged
clusterrolebinding.rbac.authorization.k8s.io/calico-node unchanged
daemonset.apps/calico-node created
serviceaccount/calico-node created
deployment.apps/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
poddisruptionbudget.policy/calico-kube-controllers created

 

이렇게 모든 Pod들이 Running이면 kubernetes 설치 완료!

root@kube-master ~ # kubectl get pods -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-7dbb9656cf-fh8td   1/1     Running   0          2m29s
kube-system   calico-node-pr5dw                          1/1     Running   0          2m30s
kube-system   calico-node-wf68n                          1/1     Running   0          2m30s
kube-system   coredns-66bff467f8-2kxcd                   1/1     Running   0          17m
kube-system   coredns-66bff467f8-4mtxh                   1/1     Running   0          17m
kube-system   etcd-kube-master                           1/1     Running   0          17m
kube-system   kube-apiserver-kube-master                 1/1     Running   0          17m
kube-system   kube-controller-manager-kube-master        1/1     Running   0          17m
kube-system   kube-proxy-t8fjt                           1/1     Running   0          15m
kube-system   kube-proxy-wqdhq                           1/1     Running   0          17m
kube-system   kube-scheduler-kube-master                 1/1     Running   0          17m

 

nodes 명령어를 통해 kubernetes 버전을 확인할 수 있다.(v1.18.6)

root@kube-master ~ # k get nodes -o wide
NAME          STATUS   ROLES    AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
kube-master   Ready    master   18m   v1.18.6   192.168.200.14   <none>        CentOS Linux 7 (Core)   3.10.0-1160.49.1.el7.x86_64   docker://19.3.5
kube-worker   Ready    <none>   16m   v1.18.6   192.168.200.15   <none>        CentOS Linux 7 (Core)   3.10.0-1160.49.1.el7.x86_64   docker://19.3.5

 

또는

kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.6", GitCommit:"dff82dc0de47299ab66c83c626e08b245ab19037", GitTreeState:"clean", BuildDate:"2020-07-15T16:58:53Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.20", GitCommit:"1f3e19b7beb1cc0110255668c4238ed63dadb7ad", GitTreeState:"clean", BuildDate:"2021-06-16T12:51:17Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}

 

 

2021. 12. 12 기준 kubernetes version release는 다음과 같다.

1.22까지 나왔다.

https://kubernetes.io/ko/releases/

 

릴리스

운영 수준의 컨테이너 오케스트레이션

kubernetes.io

 

6. 'kubectl'을 'k'로 단축하기

k8s를 쓰다 보면 kubectl라는 긴 명령어 쓰는 게 여간 쉬운 일이 아니다. 

 

그래서 kubernetes에서 k로 간단하게 쓸 수 있는 alias를 설정할 수 있다.

https://v1-18.docs.kubernetes.io/ko/docs/tasks/tools/install-kubectl/

 

kubectl 설치 및 설정

쿠버네티스 커맨드 라인 도구인 kubectl을 사용하면, 쿠버네티스 클러스터에 대해 명령을 실행할 수 있다. kubectl을 사용하여 애플리케이션을 배포하고, 클러스터 리소스를 검사 및 관리하며 로그

v1-18.docs.kubernetes.io

 

curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version --client
cat <<EOF > /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
yum install -y kubectl

 

그러면 이제 k라는 명령어만 쳐도 kubectl 친 것과 동일하다.

root@kube-master ~ # k
kubectl controls the Kubernetes cluster manager.

 Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/

Basic Commands (Beginner):
  create        Create a resource from a file or from stdin
  expose        Take a replication controller, service, deployment or pod and expose it as a new Kubernetes service
  run           Run a particular image on the cluster
  set           Set specific features on objects

Basic Commands (Intermediate):
  explain       Get documentation for a resource
  get           Display one or many resources
  edit          Edit a resource on the server
  delete        Delete resources by file names, stdin, resources and names, or by resources and label selector

Deploy Commands:
  rollout       Manage the rollout of a resource
  scale         Set a new size for a deployment, replica set, or replication controller
  autoscale     Auto-scale a deployment, replica set, stateful set, or replication controller

Cluster Management Commands:
  certificate   Modify certificate resources.
  cluster-info  Display cluster information
  top           Display resource (CPU/memory) usage
  cordon        Mark node as unschedulable
  uncordon      Mark node as schedulable
  drain         Drain node in preparation for maintenance
  taint         Update the taints on one or more nodes

Troubleshooting and Debugging Commands:
  describe      Show details of a specific resource or group of resources
  logs          Print the logs for a container in a pod
  attach        Attach to a running container
  exec          Execute a command in a container
  port-forward  Forward one or more local ports to a pod
  proxy         Run a proxy to the Kubernetes API server
  cp            Copy files and directories to and from containers
  auth          Inspect authorization
  debug         Create debugging sessions for troubleshooting workloads and nodes

Advanced Commands:
  diff          Diff the live version against a would-be applied version
  apply         Apply a configuration to a resource by file name or stdin
  patch         Update fields of a resource
  replace       Replace a resource by file name or stdin
  wait          Experimental: Wait for a specific condition on one or many resources
  kustomize     Build a kustomization target from a directory or URL.

Settings Commands:
  label         Update the labels on a resource
  annotate      Update the annotations on a resource
  completion    Output shell completion code for the specified shell (bash, zsh or fish)

Other Commands:
  alpha         Commands for features in alpha
  api-resources Print the supported API resources on the server
  api-versions  Print the supported API versions on the server, in the form of "group/version"
  config        Modify kubeconfig files
  plugin        Provides utilities for interacting with plugins
  version       Print the client and server version information

Usage:
  kubectl [flags] [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).

 

shell script를 통해 한 편에 설치해본다.(다음 재설치 때 해보고 수정함, test용입니다.)

#!/bin/bash

# 최신 릴리스를 다운로드한다.
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"

sleep 1
# kubectl 바이너리를 실행 가능하게 만든다.
chmod +x ./kubectl

sleep 1
# 바이너리를 PATH가 설정된 디렉터리로 옮긴다.
sudo mv ./kubectl /usr/local/bin/kubectl

sleep 1
# 설치한 버전이 최신 버전인지 확인한다.
kubectl version --client

sleep 1

#CentOS, RHEL 또는 Fedora
cat <<EOF > /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

sleep 1

yum install -y kubectl

 

실행 권한을 추가해주어야 한다.

root@kube-master ~ # chmod +x kuberctl-to-k.sh

 


번외) 만약 내가 kubernetes를 다 구축해놓고, 새롭게 Node를 추가하고 싶을때
  (Clone으로 kubernetes 설치 완료되었다는 가정)

 

나중에 worker2번을 추가하고 싶어서 token 명령을 넣었지만, Master에 관련된 파일과 설정들이 남아있어서 오류가 떴다.

error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
        [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
        [ERROR Port-10250]: Port 10250 is in use
        [ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
[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

 

ERROR가 친절히 나와서 파일을 지우거나 뭐 설정을 해도 되지만 간단한 명령이 있었다.

# 해당 node 초기화
kubeadm reset

 

node를 초기화 시키면 Master 관련 파일들이 사라지는 것을 확인했다.

 

아래의 오류는 ip_forward 관련 설정이라 구글에서 손쉽게 해결책을 얻을 수 있다.

 [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1

 

해당 값을 1로 바꾸면된다.

echo '1' > /proc/sys/net/ipv4/ip_forward

 

그러면 문제없이 Node가 추가된다.

 

Master에서도 node를 찍어보면 추가된 것을 확인할 수 있다.

 

※ Clone을 뜨고나서 IP변경, hostname 변경, /etc/hosts에 추가는 기본


728x90
반응형

'Cloud > k8s' 카테고리의 다른 글

사이드카 컨테이너 restart 테스트  (0) 2022.03.13
kubens을 통한 multi-cluster 컨트롤하기  (0) 2022.01.17
k8s 8일차  (0) 2021.08.19
k8s 7일차  (0) 2021.08.18
k8s 6일차  (0) 2021.08.17
Comments