반응형
Kubernetes 자동 설치 쉘 스크립트
Kubernetes 자동 설치 쉘 스크립트 입니다. 이 쉘 스크립트는 마스터노드에 해당 하며, 워커노드는 추후 시간 될 때 제작할 예정 입니다.
글을 작성한 날짜(2020-02-24)를 기준으로 쉘 스크립트로 정상 설치 확인 하였습니다.
쉘 스크립트 초기 실행 화면
테스트 환경 및 참고 사항
테스트 환경 및 참고 사항은 아래와 같습니다. 당연히 테스트 서버에서 먼저 진행 하겠지만, 혹여나 실서버에 바로 적용할 경우 크리티컬한 상황이 발생할 가능성이 존재하니 잘 확인 해주세요.
혹여나 참고 사항에 적지 못한 부분이 있을 수 있으니 스크립트를 잘 확인 후 필요하지 않은 부분은 주석 처리하여 사용 해주세요.
- Tools : VMware Workstation 15
- OS : CentOS 7.7 1908
- 참고 사항1 : ens33 인터페이스 IP를 기준으로 설정 합니다. 설정할 IP가 잡혀있는 인터페이스로 변경 해주세요. (3line)
- 참고 사항2 : firewalld가 실행 되므로 firewalld를 사용하지 않고 서비스하고 있는 상황의 경우 관련 내용을 주석 처리 해주셔야 합니다. (firewalld를 사용하지 않던 환경에서는 장애 발생 가능성 존재)
- 참고 사항3 : selinux 비활성화, br_netfilter 모듈 활성화, swap 사용이 중지 됩니다.
- 참고 사항4 : hosts 파일에 마스터노드는 master , 워커노드는 node[숫자] 으로 저장 됩니다.
- 참고 사항5 : 호스트명이 변경 됩니다.
- 참고 사항6 : /k8s_tok 파일이 생성 됩니다. 이 파일은 추후 워커노드를 클러스터에 붙일 때 사용되니 소지하고 계셔야 합니다.
쉘 스크립트 소스 코드
#!/bin/bash masterip=`ifconfig ens33 | grep 'inet ' | awk '{print $2}'` mastername='master' echo "ex) 172.16.0.0/16" echo -e "사용할 Pod Network CIDR을 입력 해주세요: \c" read pod_ip echo "--------------------------입력 전에 잠깐 읽어주세요!--------------------------" echo "Worker Node 개수 입력에 따라 호스트명과 IP 대역이 달라집니다." echo "Worker Node가 시작될 IP 입력 시 입력값에 맞춰 가장 뒷자리가 1씩 증가 합니다." echo "ex) Worker Node 10대 추가 입력" echo "ex) 시작될 IP 192.168.0.1 입력" echo "ex) hostname : node1~10" echo "ex) IP : 192.168.0.1~10" echo "------------------------------------------------------------------------------" echo -e "Worker Node를 몇개 추가 하십니까?: \c" read select echo -e "Worker Node가 시작될 IP를 입력 해주세요: \c" read selectip chk_num1="^[0-9]+$" chk_num2="^[0-9][0-9]+$" chk_num3="^[0-9][0-9][0-9]+$" worker_host_num=1 ip_chk1=`echo "${selectip: -1}" | egrep "[0-9]"` ip_chk2=`echo "${selectip: -2}" | egrep "[0-9][0-9]"` ip_chk3=`echo "${selectip: -3}" | egrep "[0-9][0-9][0-9]"` echo "hosts 파일을 수정 합니다." if [ "0$ip_chk3" -ge "100" -a "0$ip_chk3" -le "254" ] ;then worker_ip_num=${selectip: -3} worker_ip_range=`expr $worker_ip_num + $select - 1` for i in $(seq $worker_ip_num $worker_ip_range); do echo "${selectip:0: -3}$i node$worker_host_num" >> /etc/hosts worker_host_num=`expr $worker_host_num + 1` done elif [ "0$ip_chk2" -ge "10" -a "0$ip_chk2" -le "99" ] ;then worker_ip_num=${selectip: -2} worker_ip_range=`expr $worker_ip_num + $select - 1` for i in $(seq $worker_ip_num $worker_ip_range); do echo "${selectip:0: -2}$i node$worker_host_num" >> /etc/hosts worker_host_num=`expr $worker_host_num + 1` done elif [ "0$ip_chk1" -ge "1" -a "0$ip_chk1" -le "9" ] ;then worker_ip_num=${selectip: -1} worker_ip_range=`expr $worker_ip_num + $select - 1` for i in $(seq $worker_ip_num $worker_ip_range); do echo "${selectip:0: -1}$i node$worker_host_num" >> /etc/hosts worker_host_num=`expr $worker_host_num + 1` done fi echo "-------------------------------------" echo "호스트명을 변경 합니다." echo "master" > /proc/sys/kernel/hostname hostnamectl set-hostname master echo "-------------------------------------" echo "방화벽 정책을 수정 합니다." systemctl start firewalld 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 echo "-------------------------------------" echo "selinux를 비활성화 합니다." setenforce 0 sed "s/SELINUX=enforcing/SELINUX=disabled/g" -i /etc/sysconfig/selinux echo "-------------------------------------" echo "br_netfilter 모듈을 활성화 합니다." modprobe br_netfilter echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables echo "-------------------------------------" echo "swap을 중지 합니다." swapoff -a sed -e 's/\(.*swap\)/#\1/' -i /etc/fstab echo "-------------------------------------" echo "Docker를 설치 합니다." yum -y install yum-utils device-mapper-persistent-data lvm2 && yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo && yum -y install docker-ce echo "-------------------------------------" echo "쿠버네티스 저장소를 추가 합니다." 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 echo "-------------------------------------" echo "쿠버네티스를 설치 합니다." yum install -y kubelet kubeadm kubectl echo "-------------------------------------" echo "docker와 kubelet를 실행 합니다." systemctl start docker && systemctl enable docker systemctl start kubelet && systemctl enable kubelet echo "-------------------------------------" echo "master를 초기화 합니다." echo "토큰을 /k8s_tok 파일로 저장 합니다." kubeadm init --apiserver-advertise-address=$masterip --pod-network-cidr=$pod_ip | egrep "kubeadm join $masterip|--discovery-token-ca-cert-hash sha256" > /k8s_tok echo "-------------------------------------" echo "cluster에게 root 권한을 부여 합니다." mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config echo "-------------------------------------" echo "k8s 정상 작동을 확인합니다." kubectl get nodes echo "-------------------------------------"
반응형
'Programming > Bash Shell Script' 카테고리의 다른 글
[Bash Shell Script] zabbix-agent 자동 설치 쉘 스크립트 (0) | 2020.05.28 |
---|---|
[Bash Shell Script] CentOS 7 Mod_Security2 설치 및 Mod_audit 로깅 설정 쉘 스크립트 (0) | 2020.05.25 |
[Bash Shell Script] 쉘 스크립트 랜덤 문자열, 난수 생성(랜덤 숫자) (2) | 2020.02.10 |
[Bash Shell Script] 쉘 스크립트 if조건문 라인에서의 "[: too many arguments" 에러 발생 (0) | 2019.12.17 |
[Bash Shell Script] 쉘 스크립트 trap 명령어를 이용한 시그널 제어 (0) | 2019.12.17 |