[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
[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/
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 |