[Scripts] 리눅스 버젼 체크
리눅스 버젼 체크용 스크립트
Ubuntu, CentOS 및 특정 버젼에 대한 체크 목적으로 사용
Major 및 Minor까지 체크 가능
OSVersionCheck()
{
OSDistribution=$(cat /etc/*release*)
if [[ "$OSDistribution" == *Ubuntu* ]];then
ubuntuVer=$(lsb_release -r | awk '{print $2}')
if [ -z "$ubuntuVer" ];then
echo '### cannot see ubuntu version, manual check ver, and script exit'
exit
fi
case $ubuntuVer in
# ubuntu 12.04 ~ 16.04
12.04* | 14.04* | 16.04*)
echo "Ubuntu 12.04, 14.04, 16.04"
;;
# ubuntu 18.04 ~ 20.04
18.04* | 20.04*)
echo "Ubuntu 18.04, 20.04"
;;
*)
echo "Ubuntu but Untested OS"
esac
elif [[ "$OSDistribution" == *CentOS* ]];then
RHELVer=`cat /etc/redhat-release |awk '{print $3}'`
if [ "$RHELVer" = "release" ];then
RHELVer=`cat /etc/redhat-release |awk '{print $4}'`
fi
case $RHELVer in
# CentOS 6.0 ~ 6.3
6.0 | 6.1 | 6.2 | 6.3)
echo "CentOS 6.0 ~ 6.3"
# CentOS 6.4 ~ 6.10
;;
6.4 | 6.5 | 6.6 | 6.7 | 6.8 | 6.9 | 6.10)
echo "CentOS 6.4 ~ 6.10"
;;
# CentOS 7.X
7.*)
echo "CentOS 7.XX"
;;
*)
echo "CentOS but Untested OS"
esac
else
echo "Untested OS, not centOS Ubuntu"
fi
}
OSVersionCheck
|
[k8s] Get http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused. 발생 시.
redplug입니다.
테스트 환경은 Ubuntu 18.04.2 LTS 버젼 입니다.
쿠버네티스 설치 진행 시 kubeadm init, join 시 'http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused.' 문구를 마주치게 될 수도 있는데요. (cgroup관련)
구글링 해서 전 하기와 같은 방법으로 해결 하였습니다.

sudo mkdir /etc/docker
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
상기 문구 실행 후
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
# kubelet가 실행인지 확인
sudo systemctl status kubelet
# 실행중이 아닐 경우
sudo systemctl start kubelet
상기내용 실행 -> kubeadm restart -> kubeadm init or join 재실행
증상이 동일한 경우라면 재부팅 후에 진행(전 재부팅 후에 정상 설치 되었습니다.)
관련 링크 :
https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker
Container runtimes
You need to install a container runtime into each node in the cluster so that Pods can run there. This page outlines what is involved and describes related tasks for setting up nodes. This page lists details for using several common container runtimes with
kubernetes.io
[k8s] k8s 설치
1. 노드구성 : k8s-master, k8s-node1, k8s-node2
2. Hyper-v 에 Ubuntu 20.04 설치하여 진행
3. 3대 모두 Docker 설치 진행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
## apt 레파지토리 업데이트
sudo apt-get update
## 사전 설치 진행
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
## GPG 키 추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## 레파지토리 추가
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## 도커 설치
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
## 도커 등록 및 실행
sudo systemctl enable docker
sudo systemctl start docker
## 도커 버젼 확인
sudo docker version
|
4. 쿠버네티스 설치
4.1 설치 사양
Installing kubeadm
kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
Installing kubeadm
This page shows how to install the kubeadm toolbox. For information how to create a cluster with kubeadm once you have performed this installation process, see the Using kubeadm to Create a Cluster page. Before you begin A compatible Linux host. The Kubern
kubernetes.io
Before you begin
- A compatible Linux host. The Kubernetes project provides generic instructions for Linux distributions based on Debian and Red Hat, and those distributions without a package manager.
- 2 GB or more of RAM per machine (any less will leave little room for your apps).
- 2 CPUs or more.
- Full network connectivity between all machines in the cluster (public or private network is fine).
- Unique hostname, MAC address, and product_uuid for every node. See here for more details.
- Certain ports are open on your machines. See here for more details.
- Swap disabled. You MUST disable swap in order for the kubelet to work properly.

4.2 설치 진행
- 스왑 끄기
sudo swapoff -a
/etc/fstab에서 # swap was on~~ 하단 UUID 에 # 주석처리 진행
또는 swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
- 설치 전 환경 설정(네트워크 설정, master,node1~2 브릿지 네트워크 리슨할 수 있도록 설정 )
1
2
3
4
5
6
7
8
9
|
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
|
- 방화벽 오픈(테스트 여서 오프함)
1
2
|
sudo systemctl stop firewalld
sudo systemctl disable firewalld
|
- kubeadm(전체관리), kubelet(데몬), kubectl(명렁어) 설치
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
## Download the Google Cloud public signing key
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
## Add the Kubernetes apt repository:
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
## Update apt package index, install kubelet, kubeadm and kubectl, and pin their version:
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
## kubelet 실행
sudo systemctl enable kubelet
sudo systemctl start kubelet
|
4.3 kubeadm으로 클러스터 구성
- 마스터에서만 실행
1
|
kubeadm init
|
- init 완료 후 Join 토큰 저장

- kubectl 명령어 허가
1
2
3
4
5
6
|
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
|

- Pod Network 설치
1
2
|
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
kubectl get nodes
|

- Join 토큰을 node에서 실행

- bash 명령어 관련 : kubernetes.io/docs/reference/kubectl/cheatsheet/
명령어 좀 편하게...
1
2
3
4
|
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
source <(kubeadm completion bash)
echo "source <(kubeadm completion bash)" >> ~/.bashrc
|
설치완료


참고 :
www.youtube.com/watch?v=lheclzO-G7k&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=4
Centos7 ifconfig command not found
CentOS7 설치 후 ifconfig 시 command not found가 뜰 경우
yum install net-tools
인터넷 불가 시
ip addr 또는 ip link로 확인 가능
Linux 버젼 확인
- 커널 정보
uname -a
- OS 버젼 1
cat /etc/issue
- OS 버젼 2
cat /etc/redhat-release
- OS 버젼 3
cat /etc/*release*
OS bit
getconf LONG_BIT
우분투(Ubuntu)에 하둡설치 테스트
1. 우분투 설치
- Ubuntu Desktop 18.04 버젼 설치 하여 테스트 진행
- Namenode * 1ea, DataNode * 3ea 설치 진행
-
노드 |
Hostname |
IP |
비고 |
NameNode |
master |
192.168.0.200 |
|
DataNode 01 |
slave01 |
192.168.0.201 |
|
DataNode 02 |
slave02 |
192.168.0.202 |
|
DataNode 03 | slave03 | 192.168.0.203 |
|
2. 패키지 업데이트 & 업그레이드
sudo apt-get update && sudo apt-get upgrade
3. 레파지토리 추가 및 패키지 업데이트
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
자바 설치, 자바 업그레이드, 설치 확인
sudo apt-get install oracle-java8-installer
sudo apt-get upgrade
java -version
하둡 그룹 생성
sudo addgroup hadoop
하둡 계정 생성
sudo adduser --ingroup hadoop hduser
관리자 권한 추가
sudo nano /etc/sudoers
hduser 라인 추가
# User privilege specification
root ALL=(ALL:ALL) ALL
hduser ALL=(ALL:ALL) ALL
ssh 설치 +rsa키 설정
마스터 노드
sudo mkdir -p /usr/local/hadoop_tmp/hdfs/namenode
sudo mkdir -p /usr/local/hadoop_tmp/hdfs/datanode
sudo chown hduser:hadoop -R /usr/local/hadoop_tmp/
sudo chmod 777 /usr/local/hadoop_tmp/
데이터노드
sudo mkdir -p /usr/local/hadoop_tmp/hdfs/datanode
sudo chown hduser:hadoop -R /usr/local/hadoop_tmp/
sudo chmod 777 /usr/local/hadoop_tmp/
sudo nano $HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
mapred-site.xml 수정
cp $HADOOP_HOME/etc/hadoop/mapred-site.xml.template $HADOOP_HOME/etc/hadoop/mapred-site.xml
sudo nano $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
masters, slaves 파일 편집
sudo nano $HADOOP_HOME/etc/hadoop/masters
master
sudo nano $HADOOP_HOME/etc/hadoop/slaves
master
slave01
slave02
slave03
네임노드 포멧(마스터노드만)
hdfs namenode -format
start-dfs.sh, start-yarn.sh 실행 및 확인(jps)
start-dfs.sh
start-yarn.sh
jps
> start-dfs.sh
NameNode, SecondaryNameNode, DataNode 가 실행
> start-yarn.sh
master에서는 ResourceManager, NodeManager 실행, slave NodeManager 실행
> http://master:50070 / 9000 액티브 확인 , 라이브노드 4개여야 함
> http://master:8088 / yarn 확인
맵리듀스 테스트
- 테스트용 파일을 HDFS에 업로드
hdfs dfs -mkdir /input
hdfs dfs -copyFromLocal /usr/local/hadoop/README.txt /input
hdfs dfs -ls /input
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input/README.txt ~/wordcount-output
- 결과 디렉톨 확인
hdfs dfs -ls ~/wordcount-output
> SUCCESS 있으면 성공, 파트 파일에 실해 정보 값 표기
- 실행 결과 확인
hduser@master:/usr/local/hadoop$hdfs dfs -cat ~/wordcount-output/part-r-00000 .... source 1 the 8 this 3 to 2 under 1 use, 2 uses 1 using 2 visit 1 website 1 which 2 wiki, 1 with 1 written 1 you 1 your 1 hduser@master:/usr/local/hadoop$ hduser@master:/usr/local/hadoop$
|
하둡 테스트
멀티노드 클러스터
- master ,slave1~3 서버, 네트워크 설정
- /etc/hosts 파일 설정에서 각 서버에 대한 DNS 설정
- /etc/hostname 파일 수정
- /bin/hostname -F /etc/hostname
> hostname 쳐서 확인
- 재부팅
- SSH 공개키 복사 작업
> scp -rp ~/.ssh/authorized_keys root@slave1:~/.ssh/authorized_keys
> scp -rp ~/.ssh/authorized_keys root@slave2:~/.ssh/authorized_keys
> scp -rp ~/.ssh/authorized_keys root@slave3:~/.ssh/authorized_keys
- 노드간 SSH 접속 설정(master~ slave3까지 모두 작업)
> ssh master
> exit
> ssh slave1
> exit
> ssh slave2
> exit
> ssh slave3
- hadoop-env.sh 수정 (master에서 실행)
> gedit $HADOOP_HOME/etc/hadoop/hadoop-env.sh
> 25라인 JDK 경로 수정 : export JAVA_HOME=/usr/local/jdk1.8
> 104번 라인 하둡 데몬의 pid 저장 경로 수정 : export HADOOP_PID_DIR=/home/centos/hadoop-2.9.0/pids
- core-site.xml 수정 (모든 노드에서 실행)
> gedit $HADOOP_HOME/etc/hadoop/core-site.xml
> localhost:9000 > master:9000로 수정
- hdfs-site.xml 수정 (master)
> $HADOOP_HOME 하위에 namenode와 datanode 디렉토리 생성
> rm -rf $HADOOP_HOME/namenode
> mkdir $HADOOP_HOME/namenode
> chwon root -R $HADOOP_HOME/namenode
> chmod 777 $HADOOP_HOME/namenode
> rm -rf $HADOOP_HOME/datanode
> mkdir $HADOOP_HOME/datanode
> chwon root -R $HADOOP_HOME/datanode
> chmod 777 $HADOOP_HOME/datanode
> gedit $HADOOP_HOME/etc/hadoop/hdfs-site.xml
> dfs.replication 1 > 2로 수정
> dfsnamenode.name.dir, dfs.datanode.data.dir 내용 추가
- hdfs-site.xml 수정 (slave123)
> $HADOOP_NODE 하위에 datanode 생성
> rm -rf $HADOOP_HOME/datanode
> mkdir $HADOOP_HOME/datanode
> chwon root -R $HADOOP_HOME/datanode
> chmod 777 $HADOOP_HOME/datanode
> dfs.datanode.data.dir 내용 추가
- 잡트래커 설정(모든노드)
> cp $HADOOP_HOME/etc/hadoop/mapred-site.xml-template $HADOOP_HOME/etc/hadoop/mapred-site.xml
> gpedit $HADOOP_HOME/etc/hadoop/mapred-site.xml
> mapreduce.framework.name yarn 추가
- yarn-size.xml 파일 수정 (모든노드)
> gedit $HADOOP_HOME/etc/hadoop/yarn-site.xml
> 기본 옵션 설정으로 수정
- masters, slaves 파일 수정(master만 수정)
> gedit $HADOOP_HOME/etc/hadoop/masters
> master
> gedit $HADOOP_HOME/etc/hadoop/slaves
> master
slave1
slave2
slave3
- 네임노드 포멧(master에서만 실행), 하둡가동, HDFS 폴더 생성
> $HADOOP_HOME/bin/hdfs namenode -format
- 방화벽 내림 (모든노드)
> systemctl stop firewalld.service
> systemctl disable firewalld.service
- DFS, YARN 시작 (master만 실행)
> start-dfs.sh
NameNode, SecondaryNameNode, DataNode 가 실행
> start-yarn.sh
master에서는 ResourceManager, NodeManager 실행, slave NodeManager 실행
> 확인은 jps
> http://master:50070 / 9000 액티브 확인 , 라이브노드 4개여야 함
> http://master:8088 / yarn 확인
분석 프로그램 실행
- 맵리듀스 jab을 실행하기 위해 HDFS 데릭토리 만듬(master)
> hdfs dfs -mkdir /user
> hdfs dfs -mkdir /user/root
> hdfs dfs -mkdir /user/root/conf
- 하둡 쉘 커맨드로 확인(master)
> hdfs dfs -ls
- 하둡파일시스템에 파일 업로드
> hdfs dfs put $HADOOP_HOME/etc/hadoop/hadoop-env.sh /user/conf/hadoop-env.sh
- 업로드 파일 확인
> hdfs dfs -ls /
> hdfs dfs -ls /user
> hdfs dfs -ls /user/conf / hadoop-env-sh 파일 제대로 올라왔는지 확인
- 테스트용 파일을 HDFS에 업로드
hdfs dfs -mkdir /input
hdfs dfs -copyFromLocal /usr/local/hadoop/README.txt /input
hdfs dfs -ls /input
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input/README.txt ~/wordcount-output
- 결과 디렉톨 확인
hdfs dfs -ls ~/wordcount-output
> SUCCESS 있으면 성공, 파트 파일에 실해 정보 값 표기
- 실행 결과 확인
> hdfs dfs -cat ~/wordcount-output/part-r-00000
- 로컬로 다운
> hdfs dfs -copyToLocal ~/wordcount-output/part-r-00000 /home/centos/result.txt
> head -5 /home/centos/result.txt / 5줄만 머리에 출력
- 두번 실행하게 되면 에러 발생 아웃풋 디렉토리는 삭제하여야 함
> hdfs dfs -rm -r ~/wordcount-output // r은 하위디렉토리 까지 삭제
- master:50070에서 사용량 확인 가능
명령어 관련내용
- 형식 : hdfs dfs -명령어 옵션
> dfs : Distributed Filesystem Shell (분산 파일 시스템 쉘)
- help : 도움말
> hdfs dfs -help
> hdfs dfs -help ls // ls 명령어에 대한 도움말
- ls : 파일 목록 보기
> hdfs dfs -ls //// 경로 없을경우 사용자 계정의 홈 디렉토리 조회
> hdfs dfs -ls conf / 해당 디렉토리 파일 목록 조회
> hdfs dfs -ls -R / 하위 디렉토리 목록까지 출력
> master 뿐만 아니라 slave에도 동일하게 실행 가능
- du : 파일용량 확인
> hdfs dfs -du : 디렉토리 또는 파일의 사용량을 바이트 단위로 출력
> hdfs dfs -du -s : 해당 디렉토리의 전체용량만(합계) 출력
- cat, text : 파일내용 보기
> cat : 텍스트 파일 전용
> hdfs dfs -cat conf/hadoop-env.sh
> text : 텍스트 파일과 압축파일도 읽을 수 있음
> hdfs dfs -text conf/hadoop-env.sh
- mkdir : 디렉토리 생성
> hdfs dfs -mkdir input
> hdfs dfs ls
- put, copyFromLocal,get, copyToLocal, getmerge, cp : 파일 복사
> hdfs dfs -put $HADOOP_HOME/etc/hadoop/core-site.xml input
input 경로로 복사
> hdfs dfs -ls input
> hdfs dfs -copyFromLocal : 로컬 파일시스템에서 하둡분산파일 시스템으로 복사
> hdfs dfs -copyFromLocal $HADOOP_HOME/etc/hadoop/core-site.xml input/a : input폴더에 a이름으로 변경하여 복사
> hdfs dfs -get input/a a : HDFS의 input/a 를 로컬시스템 에 현재폴더에 a라는 파일이름으로 복사
> ls -la
> hdfs dfs -copyToLocal input/a b : HDFS의 input/a 파일을 로컬시스템에 b라는 파일명으로 변경하여 복사
> cat b
> hdfs dfs -getmerge : 머지하여 복사
> hdfs dfs -getmerge input c : HDFS의 input디렉토리의 파일을 로컬시스템의 c파일에 머지하여 복사
> cat c
> ls -la : c파일 용량 확인
> hdfs dfs -cp conf/hadoop-env.sh hadoop-env-copy.sh : HDFS서버에서 HDFS서버로 파일 복사
> hdfs dfs -ls
> hdfs dfs -ls /user/root
- mv, moveFromLocal : 파일이동
> hdfs dfs -mv input/a input/a2 : input/a 파일을 input/a2로 옮김 (HDFS간 옮김)
> hdfs dfs -moveFromLocal : 로컬 시스템에서 하둡 분산파일 시스템으로 옮김
> hdfs dfs -mkdir temp
> hdfs dfs -moveFromLocal a temp/a : 로컬시스템의 a파일을 HDFS의 temp/a파일로 옮김
- rm : 디렉토리나 파일 삭제
> hdfs dfs -rm temp/a : temp 디렉토리의 a파일 삭제
> hdfs dfs -rm temp : temp 디렉토리 삭제
> hdfs dfs -rm -r input : input 디렉토리 및 하위 디렉토리, 파일까지 다 삭제
- count : 카운트값 조화
> hdfs dfs -count conf : 디렉토리, 파일, 파일사이즈
- tail : 파일의 마지막 내용 확인
> hdfs dfs -tail hadoop-env-copy.sh
- chmod : 권한변경
> hdfs dfs -chmod 777 conf : conf 디렉토리 권한을 777로 변경
> 폴더 내 하위 파일까지 권한 변경하는 방법 확인
> hdfs dfs -ls : conf 권한 변경 확인
> 유닉스 파일 권한 : 10자리
디렉토리(1) 소유자(3) 그룹(3) 전체(3)
r 읽기(4)
w 쓰기(2)
x 실행(1)
- touchz : 0바이트 파일 생성
> hdfs dfs -touchz test.txt
> hdfs dfs -ls
hostname 변경 하기
우분투 호스트명 변경하기
nano /etc/hostname 호스트명 변경 후 새로운 세션 열어서 확인 |
CentOS DNS 설정 변경
CentOS 6.5 기준으로 작성되었습니다.
공유기 설정 (IPTIME 기준)
공유기 환경 내 구축된 서버이기 때문에 외부와의 통신을 위하여 포트포워딩 설정이 필요합니다.
(DNS는 TCP/UDP 53 Port를 사용)
방화벽 ACL Open
# iptables -A INPUT -p udp -m state --state NEW --dport 53 -j ACCEPT |
DNS 설치
# yum -y install bind-* |
DNS서버 설치 확인
[root@reds-cent ~]# rpm -qa | grep bind |
DNS 설정
named.conf 수정
# vi /etc/named.conf // // 주석처리 // listen-on port 53 { 127.0.0.1; }; // listen에 대해 any로 Open listen-on port 53 { any; }; // 주석처리 // allow-query { localhost; }; // 네임서버 쿼리를 허용할 IP 설정 allow-query { any; }; include "/etc/named.rfc1912.zones"; |
named.rfc1912.zones 수정
[root@reds-cent ~]# vi /etc/named.rfc1912.zones // flgram.com Domain
|
zone 파일 생성 시 named.localhost 파일을 복사해서 사용, 및 소유권 정정
# cp /var/named/named.localhost /var/named/flgram.com.zone # chown root.named /var/named/flgram.com.zone |
flgram.com zone파일 생성
[root@reds-cent ~]# vi /var/named/flgram.com.zone |
flgram.com rev파일 생성(수정)
[root@reds-cent ~]# vi /var/named/flgram.com.rev |