♤ CentOS 8 가상머신 3대 준비 ♤
♠ Master ♠ 200.200.200.134
♠ Node1 ♠ 200.200.200.135
♠ Node2 ♠ 200.200.200.136
[ 3대 공통 ]
● 호스트 이름 설정
# vi /etc/hostname
master 또는 node1 또는 node2
# vi /etc/hosts
200.200.200.134 master
200.200.200.135 node1
200.200.200.136 node2
● 방화벽 설정
# 포트 허용
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
# 커널 모듈 활성화 - 재부팅 시에도 설정 유지
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
# 로컬 방화벽 해제 & 재부팅 시에도 설정 유지
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
# 재부팅
init 6
● 도커 설치
# 설치
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --enable docker-ce-nightly
yum-config-manager --enable docker-ce-test
yum install -y docker-ce docker-ce-cli containerd.io --allowerasing
# 파일 설정
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
# 재시작
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
● 쿠버네티스 설치
# 방화벽
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
# 파일 설정
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 확인 - 위 내용이 들어있어야 함
sysctl --system
# 파일 설정
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
# 설치
dnf install -y kubelet-1.22.5 kubeadm-1.22.5 kubectl-1.22.5 --disableexcludes=kubernetes
# 재시작
systemctl enable kubelet
systemctl start kubelet
# swap 설정
swapoff -a
vi /etc/fstab
/dev/mapper/cl-swap none swap defaults 0 0 수정
#/dev/mapper/cl-swap none swap defaults 0 0 로 변경 ! (앞에 주석 달아주기)
[ Master ]
# container 네트워크 대역 설정
kubeadm init --pod-network-cidr 100.100.100.0/24 --control-plane-endpoint "192.168.0.11"
# kubeadm init --pod-network-cidr [container 네트워크 대역 설정] --control-plane-endpoint "[본체 컴퓨터 ip]"
# 본체 컴퓨터에서 6443 포트 포트포워딩 필요
# 마지막 두 줄 워커 노드들에 복사해주어야 함
# 홈 디렉토리 생성 + 관리 파일 - kubectl 사용 가능
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 확인
kubectl get nodes # 마스터만 출력됨
# calico
#참고 : https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-with-kubernetes-api-datastore-50-nodes-or-less
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml -O
vi calico.yaml # 주석 해제
- name: CALICO_IPV4POOL_CIDR
value: "150.150.150.0/24" # container ip 대역
kubectl apply -f calico.yaml # 적용하기
[ Node1 / Node2 ]
# 방화벽
firewall-cmd --zone=public --permanent --add-port={10250,30000-32767}/tcp
firewall-cmd --reload
# Master 노드에서 가져온 명령어 실행 결과 입력
# kubeadm init --pod-network-cidr 100.100.100.0/24 --control-plane-endpoint "192.168.0.11" 명령어 실행했을 때 마지막 두 줄 입력
kubeadm join 192.168.0.11:6443 --token ogtwdn.23oqr1bki6ag6qnq \
--discovery-token-ca-cert-hash sha256:af1537dfd16dd6968c112894e3411a90163d644c57232d4b26703a37594fd476
● 확인하기 ( Master 에서 )
# 확인하기
kubectl get pod -n kube-system
kubectl get nodes
# namespace 목록 확인 명령어
kubectl get all --all-namespaces
[ Dashboard 설정 ]
● Master
# recommended.yaml 다운받기
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
# 파일 설정
vi recommended.yaml
type: NodePort # 45번 라인 추가
# 적용하기
kubectl apply -f recommended.yaml
# 443:포트번호 확인
kubectl get services -n kubernetes-dashboard
# 방화벽
firewall-cmd --permanent --add-port=확인한포트번호/tcp
firewall-cmd --reload
》 3개의 노드 방화벽 꺼주기! > systemctl stop firewalld
● 접속하기
# 윈도우의 웹 브라우저로 접속
https://마스터노드IP:확인한포트번호
》 크롬에서 안전하지 않은 페이지 뜨면 브라우저 아무 곳에 thisisunsafe 입력
● 토큰 발급받기
# 파일 설정 1
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
EOF
# 파일 설정 2
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
# 토큰 확인
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
'CLOUD > Docker&Kubernetes' 카테고리의 다른 글
[Kubernetes] Service - LoadBalancer (0) | 2023.04.25 |
---|---|
[Kubernetes] Nginx - Gunicorn - Mysql 3계층 연동하기 (Pod/ConfigMap/Service) (2) | 2023.04.24 |
[Docker/Linux] 도커 네트워크 확인하기 (0) | 2023.04.20 |
[Docker/Linux] 가상 네트워크 - 브릿지 장비로 통신하기 (도커없이) (0) | 2023.04.20 |
[Docker/Linux] 가상 네트워크 설정하기 (0) | 2023.04.20 |