본문 바로가기

Kubernetes

쿠버네티스 설치하기

NodeIPMemoryHdd
k8s-master192.168.1.112G20G
k8s-node01192.168.1.121G20G
k8s-node02192.168.1.131G20G

/etc/hosts

192.168.1.11    k8s-master
192.168.1.12    k8s-node01
192.168.1.13    k8s-node02

전체 노드에서 설정

Container Runtime 설정(Docker)

# Docker CE 설치
## 리포지터리 설정
### 필요한 패키지 설치.
yum install -y yum-utils device-mapper-persistent-data lvm2

### Docker 리포지터리 추가
yum-config-manager --add-repo \
  https://download.docker.com/linux/centos/docker-ce.repo

## Docker CE 설치.
yum update -y && yum install -y \
  containerd.io-1.2.13 \
  docker-ce-19.03.8 \
  docker-ce-cli-19.03.8

## /etc/docker 디렉터리 생성.
mkdir /etc/docker

# 데몬 설정.
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

mkdir -p /etc/systemd/system/docker.service.d

# Docker 재시작.
systemctl daemon-reload
systemctl restart docker

systemctl enable docker
systemctl start docker

swapoff

swapoff -a

/dev/mapper/centos-swap swap swap defaults 0 0 주석 처리

vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Apr  7 04:37:10 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=429b4bb0-e606-4586-9b04-15ed2aba4e9e /boot                   xfs     defaults        0 0
# /dev/mapper/centos-swap swap                    swap    defaults        0 0

Kubeadm 설치

bridge된 트래픽 허용

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

kubeadm, kubelet kubectl 설치

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch
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=kubelet kubeadm kubectl
EOF

selinux 설정 안함을 위해 setenforce 0 으로 변경 후 확인

SELINUX 보안정책 으로 서비스나 권한문제로 에러가 날 경우가 있음

[root@k8s-master daniel]# setenforce 0
[root@k8s-master daniel]# getenforce
Permissive # SELINUX가 켜져있지만 정책에 위반된 사항에 경고만 함(audit log에 남음)

etc/selinux/config 에서 SELINUX=disable 로 변경

sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

firewalld stop

systemctl stop firewalld

Master Node 에서만

calico에서는 기본이 192.168.0.0/16 이지만 10.244.0.0/16 으로 변경하였습니다.

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

kubeinit 완료

    Your Kubernetes control-plane has initialized successfully!

    To start using your cluster, you need to run the following as a regular user:

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

    You should now deploy a pod network to the cluster.
    Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
      https://kubernetes.io/docs/concepts/cluster-administration/addons/

    Then you can join any number of worker nodes by running the following on each as root:

    kubeadm join 192.168.1.11:6443 --token vyayut.0wpbq8btcoerojxi \
        --discovery-token-ca-cert-hash sha256:02ad4630328d720e8d9567e1ab0d8bf6d98c243bedd10b827537c189b49fc7c1 

사용자 daniel (user권한 주기)

vi /etc/sudoers

##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
daniel  ALL=(ALL)       ALL # 추가하기

readonly 로 수정이 안될 경우

sudo bash
chattr -i /etc/sudoers
chmod u+w /etc/sudoers

user에서 실행

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

user에서

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

calico yaml 파일 다운로드 후 10.244.0.0/16으로 변경

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

POD_CIDR="10.244.0.0/16" \
sed -i -e "s?192.168.0.0/16?$POD_CIDR?g" calico.yaml

수정한 calico.yaml 파일 적용

[root@k8s-master ~]# kubectl apply -f calico.yaml

서비스 확인

[root@k8s-master ~]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                       READY   STATUS              RESTARTS   AGE
kube-system   calico-kube-controllers-5fc5dbfc47-mdrtp   0/1     ContainerCreating   0          59s
kube-system   calico-node-rtcbx                          0/1     PodInitializing     0          60s
kube-system   coredns-66bff467f8-c22kd                   0/1     ContainerCreating   0          4m26s
kube-system   coredns-66bff467f8-n5p9w                   0/1     ContainerCreating   0          4m26s
kube-system   etcd-k8s-master                            1/1     Running             0          4m35s
kube-system   kube-apiserver-k8s-master                  1/1     Running             0          4m35s
kube-system   kube-controller-manager-k8s-master         1/1     Running             0          4m35s
kube-system   kube-proxy-v95xm                           1/1     Running             0          4m26s
kube-system   kube-scheduler-k8s-master                  1/1     Running             0          4m35s

worknode

각 노드마다 마스터노드에 연결하기

kubeadm join 192.168.1.11:6443 --token vyayut.0wpbq8btcoerojxi \
    --discovery-token-ca-cert-hash sha256:02ad4630328d720e8d9567e1ab0d8bf6d98c243bedd10b827537c189b49fc7c1

Master Node에서 확인하기

노드 확인

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES    AGE     VERSION
k8s-master   Ready    master   9m37s   v1.18.1
k8s-node01   Ready    <none>   85s     v1.18.1
k8s-node02   Ready    <none>   80s     v1.18.1

namespace 확인

[root@k8s-master ~]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-5fc5dbfc47-mdrtp   1/1     Running   0          6m16s
kube-system   calico-node-dsjlh                          1/1     Running   0          105s
kube-system   calico-node-rtcbx                          1/1     Running   0          6m17s
kube-system   calico-node-sfznq                          1/1     Running   0          110s
kube-system   coredns-66bff467f8-c22kd                   1/1     Running   0          9m43s
kube-system   coredns-66bff467f8-n5p9w                   1/1     Running   0          9m43s
kube-system   etcd-k8s-master                            1/1     Running   0          9m52s
kube-system   kube-apiserver-k8s-master                  1/1     Running   0          9m52s
kube-system   kube-controller-manager-k8s-master         1/1     Running   0          9m52s
kube-system   kube-proxy-c6rvr                           1/1     Running   0          110s
kube-system   kube-proxy-ptdqt                           1/1     Running   0          105s
kube-system   kube-proxy-v95xm                           1/1     Running   0          9m43s
kube-system   kube-scheduler-k8s-master                  1/1     Running   0          9m52s