CentOS7.x 버전으로 작업을하였는데, 가급적 CentOS외 linux OS를 쓰기 바란다..
firewalld가 껴있는 OS 네트웍 커널 및 방화벽 정책이 두고두고 괴롭힐 것임
■ 사전 OS 작업
SELINUX 끄기
# vi /etc/selinux/config
SELINUX=enforcing 를 disabled로 변환
# setenforce 0
Firewalld 끄기
# systemctl stop firewalld
# systemctl disable firewalld
# vi /etc/hosts에 node dns정보 등록하기
DNS에 쿠버네티스 노드가 등록이 된게 아니라면 hosts에 직접등록해줘야 합니다.
swap 비활성화
$ swapoff -a
$ vi /etc/fstab
swap 영역 비활성화
$ reboot
■ 사전 방화벽 작업
넷필터 모듈 호출여부 확인
$ lsmod | grep br_netfilter
만약 로딩이 안되어 있으면
$ sudo modprobe br_netfilter
Linux의 Iptable이 브릿지 트래픽을 보아야함
-------------------------------------------------------
$ 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
$echo '1' > /proc/sys/net/ipv4/ip_forward
■ 도커 런타임 설치
$yum install -y yum-utils
$yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$yum install docker-ce docker-ce-cli containerd.io
$systemctl start docker
$systemctl enable docker
■ kubeadm, kubelet, kubectl설치
$cat <<EOF | sudo tee /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
$yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
$systemctl enable --now kubelet
■ kubeadm initializing (마스터노드에서..)
$ kubeadm init --pod-network-cidr 10.244.0.0/16 --apiserver-advertise-address=$myip
※ 이니셜라이징때 추후에 사용할 Network Add-on을 고려하여 옵션을 넣어야 한다. 나의 경우 network add-on으로 flannel을 사용할시에는 '--pod-network-cidr' 옵션이 꼭 필요하다.
※ 이니셜라이징 중에 timeout ERROR가 발생하면 고생합니다. 그럴땐 다시 초기화를 해야되는데 아래 링크를 통해 초기화 후 Kuberadm 이니셜라이징을 실행하세요.
https://likefree.tistory.com/13
kubenetes설치 실패 시 초기화방법
k8s을 설치하고 재 설치 시 전에 있던 데이터가 남아 있어서 문제가 생긴다. $ kubeadm init 필자의 경우 위 명령어가 time out으로 계속 실패하여 원인을 찾는데 많은 시간을 소비했다. 아래 명령어를
likefree.tistory.com
■ worker node에서 API Token으로 kubeadm에 join하기 (Worker노드에서..)
$ kubeadm join ~~~~~~~:6443 --token yfrmby.jcnqz2kekswikhzb
--discovery-token-ca-cert-hash sha256:81c5f0382f821de0f2119baca429e6b1dce6ff5cd5f728b465782db26c6ade21
■ Worker노드와 MasterNode 통신
Worker노드에서 MasterNode의 API를 통해 통신합니다.
이때 중간에 방화벽이 있거나, 혹은 Master서버에 firewalld 데몬에서 차단할 수 있습니다.
#firewall-cmd --permanent --zone=public --add-port=6443/tcp
#firewall-cmd --reload
■ Master에서 Pod 수행(Node를 추가할 예정이라면 하지마세요.)
기본적으로 클러스터는 보안 문제로 master에서 pod를 스케줄링 하지 않는다. 하지만, 예를 들어 테스트할때 노드가 부족하거나 단일 노드에서 개발 용으로 kubernetes 클러스터를 사용할 때, master에서 pod를 스케줄링하도록 명령할 수 있다.
$kubectl taint nodes --all node-role.kubernetes.io/master-
■ kubectl 이 root가 아닌 user에서 동작하게 하기
$ mkdir -p $HOME/.kube
$ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ chown $(id -u):$(id -g) $HOME/.kube/config
■ 테스트용 리소스 생성
$ kubectl create deployment nginx --image=nginx
$ kubectl delete deployment nginx
■ Network Add on 설치하기
Flannel 설치는 한줄이면 된다..
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
■ 환경변수 설정(특정 유저로 운영하고 싶을때)
$ export KUBECONFIG=/etc/kubernetes/admin.conf
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
■ 대시보드 올리기 Flannel과 충돌이 있습니다.
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
$ kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
edit service를 통해 type: ClusterIP를 NodePort로 변경하고 저장합니다.
https://아이피:31961/#/login 로 브라우저에서 접속
■ 대시보드 인증키
Kubernetes Login 인증키 생성
Kubernetes는 접속방법이 두가지가 있는데 kubeconfig를 사용하는 방법과 Token을 사용하는 방법입니다.
지금부터는 Token을 생성하여 접속하는 과정에 대해 알아보겠습니다.
먼저 serviceaccount를 생성합니다.
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
EOF
다음으로 ClusterRoleBinding을 생성합니다.
cat <<EOF | kubectl create -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
EOF
사용자 계정의 토큰을 가져와서 대시보드에 입력합니다.
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
$ kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
'PaaS > Kubernetes' 카테고리의 다른 글
(Kubernetes) Deployment 전략 들 (0) | 2021.06.28 |
---|---|
(Kubernetes) Kube-proxy, Kube-dns, core-dns (0) | 2021.04.13 |
(Kubernetes) 클러스터 디자인 하기 (0) | 2021.04.11 |
(Kubernetes) Ingress (0) | 2021.04.08 |
(Kubernetes) DNS (0) | 2021.04.07 |