[K8S] Namespace Terminating 상태

IT_Engineer/클라우드|2021. 1. 13. 18:43
728x90

쿠버네티스 네임스페이스가 Terminating 상태에서 지워지지 않을 때가 있다.

# kubectl delete ns namespace 라는 명령어에도 삭제가 되지 않을 때.

 

찾아보니 나만 그런 것 같지는 않고, 많은 사람들이 겪는 문제인 것 같아서,

누군가가 조금이라도 더 쉽고 빠르게 해결할 수 있기를 바라면서 내용을 작성하기로 했다.

 

방법 1. (폐쇄망 혹은 별다른 라이브러리/패키지 없이 지우기)

# IP/Port 확인
kubectl proxy &


#namespace 상태?를 json파일로 뽑아내기
kubectl get namespace {네임스페이스명} -o json > {네임스페이스명}.json


#뽑아낸 json파일 수정
sed -i '/"kubernetes"/d' ./{네임스페이스명}.json


#수정한 파일 적용
curl -k -H "Content-Type: application/json" -X PUT --data-binary @{네임스페이스명}.json 127.0.0.1:8001/api/v1/namespaces/{네임스페이스명}/finalize

 

방법 2. jq라는 패키지를 이용하여 진행

#jq 패키지 설치 및 IP/Port 확인
yum install jq
kubectl proxy &

#yaml 파일로 적용할 temp.json 파일 생성
kubectl get namespace {네임스페이스명} -o json |jq '.spec = {"finalizers":[]}' > temp.json

#수정사항 반영
curl -k -H "Content-Type: application/json" -X PUT --data-binary @temp.json http://127.0.0.1:8001/api/v1/namespaces/{네임스페이스명}/finalize

 

각각 편하고 상황에 맞는 방법으로 해결할 수 있길 바란다.

728x90

댓글()

[K8S] Kubernetes pod to local 파일 복사

IT_Engineer/클라우드|2021. 1. 7. 19:00
728x90

Kubernetes pod 내 파일을 로컬로 복사하고 싶어서 열심히 찾아보았다.

 (Kubernetes  pod to local 파일 복사 / Kubernetes container to local)

 

그런데 K8S 버그?로 에러메시지가 게속 떠서 안 되고 있는 줄 알았는데,

잘 되고 있더라!!! ㅎㅎ 그래도 나처럼 또 헤매고 있을 누군가에게 도움이 되기 위해!

 

우선, kubectl cp -h 라고 치면 다음과 같이 나온다.

$ kubectl cp -h

  # !!!Important Note!!! 
  # Requires that the 'tar' binary is present in your container 
  # image.  If 'tar' is not present, 'kubectl cp' will fail. 
   
  # Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod in the default namespace 
  kubectl cp /tmp/foo_dir <some-pod>:/tmp/bar_dir 
   
  # Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific container 
  kubectl cp /tmp/foo <some-pod>:/tmp/bar -c <specific-container> 
   
  # Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace <some-namespace> 
  kubectl cp /tmp/foo <some-namespace>/<some-pod>:/tmp/bar 
   
  # Copy /tmp/foo from a remote pod to /tmp/bar locally 
  kubectl cp <some-namespace>/<some-pod>:/tmp/foo /tmp/bar 

 

간단하게 정리하면, 

 

1. 로컬에서 POD 안으로 복사

$ kubectl cp 디렉토리/파일이름 POD이름:디렉토리/파일이름

 

2. POD에서 로컬로 file 복사

$ kubectl cp namespace pod이름:디렉토리/파일이름 /옮길 디렉토리/파일이름

 

- namespace와 pod이름 사이에 /를 넣으면 에러가 나서 띄어쓰기로 썼는데, 혹시 안되면 / 한 번 넣어보기

- 그리고 경로는 절대경로로 주세요!

 

나는 2번 명령어를 사용했는데 자꾸, 

이렇게 "tar: Removing leading '/' from member names" 라는 에러가 뜨길래 안된 줄 알았는데,

하고 ls -al 로 확인해보니 잘 들어와있었다. (쿠버네티스 버그라고 하던데. 예전 버전이라 최신 버전은 안뜰 수도 ㅎㅎ)

 

 

참고로 tar: Removing leading '/' from member names 에러는

kuberneterts가 절대경로를 보안상 안 좋게 생각해서 앞에 '/' 를 removing 한다는 건데,,

에러를 찾으면서 본거라 정확하지 않을 수도 있다. 

 

모쪼록 모두 잘 해결해서 우리 모두 행복하길!!

 

 

 

 

728x90

댓글()

[K8S] Windows WSL Minikube 및 Wordpress 설치

IT_Engineer/클라우드|2020. 11. 30. 11:34
728x90

기초 환경 설정

! Windows Docker 설치 가능 환경

  • Windows 7 이상 (Windows8, Windows10)
  • 컴퓨터 하드웨어가 가상화(Virtualization) 지원
  • 작업관리자(ctrl+ alt+ delete) > 성능 탭 > 가상화 : 사용

  • 윈도우의 Hyper-V 실행 :
    프로그램 제거 또는 변경 > Windows 기능 켜기/끄기 > Hyper-V 체크 후 확인

 


수행 내용

  • Winodws Docker, WSL2, minikube 설치
  • minikube를 통해서 mysql 과 연동된 wordpress 구축

1. Docker for Windows 설치

! Docker for Windows 설치

2.  WSL2 설치

  • https://docs.microsoft.com/ko-kr/windows/wsl/install-win10 > 4단계
    x64 머신용 최신 WSL2 Linux 커널 업데이트 패키지 클릭 및 다운로드
  • wsl_update_x64.exe 설치 프로그램 실행
  • WSL 프로그램 실행
  • Microsoft Store > Ubuntu, Windows Terminal 설치
  • Windows Terminal에서 상단의 버튼 누르면 Ubuntu 열림
  • Windows Powershell 마우스 오른쪽 클릭 > 관리자 모드 실행 > wsl 확인
> wsl l -v # wsl Version 2 확인

 
> wsl 진입
# apt-get 패키지 업데이트
> sudo apt-get update && sudo apt-get install
           apt-transport-https
           ca-certificates
           curl
           software-properties-common


#docker 설치
> sudo apt-get install docker
> sudo apt-get install docker.io
> docker version # docker 설치 버전 확인
 

 

3. Kubernetes(minikube) 설치

! minikube 설치

  • Docker for Windows > Settings > Resources > NETWORK, WSL ~ 모두 체크
  • Docker for Windows > Settings > Kubernetes 모두 체크

# minikube 설치
$ curl LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
$ sudo dpkg i minikube_latest_amd64.deb


# minikube 실행
$ minikube start driver=docker
$ minikube kubectl

 

 

4. mysql을 연동한 wordpress 구축

! kustomization.yaml 생성하기

  • 시크릿 생성자 추가
# kustomization.yaml 생성
# password (password 부분) 수정 가능
$ cat <<EOF >./kustomization.yaml
secretGenerator:
- name: mysql-pass 
  literals: 
  - password=password(#본인 비밀번호)
EOF

 

  • MySQL 디플로이먼트 단일 인스턴스 기술
  • MySQL 컨테이너는 퍼시스턴트볼륨을 /var/lib/mysql에 마운트
  • MYSQL_ROOT_PASSWORD 환경변수는 시크릿에서 가져와 DB 암호 설정
  • MySQL deployment 구성 파일 다운로드
# MySQL 디플로이먼트 구성 파일 다운로드
$ curl LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml


# Wordpress 디플로이먼트 구성 파일 다운로드
$curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml



 

  • 위 두 yaml 파일을 kustomization.yaml에 추가
$ cat <<EOF >>./kustomization.yaml
resources: 
     - mysql-deployment.yaml
     - wordpress-deployment.yaml
EOF

! yaml 내용

  • mysql-deployment.yaml 파일 내용
더보기

# mysql-deployment.yaml

apiVersion: v1

kind: Service

metadata:

name: wordpress-mysql

labels:

app: wordpress

spec:

ports:

- port: 3306

selector:

app: wordpress

tier: mysql

clusterIP: None

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mysql-pv-claim

labels:

app: wordpress

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 20Gi

---

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2

kind: Deployment

metadata:

name: wordpress-mysql

labels:

app: wordpress

spec:

selector:

matchLabels:

app: wordpress

tier: mysql

strategy:

type: Recreate

template:

metadata:

labels:

app: wordpress

tier: mysql

spec:

containers:

- image: mysql:5.6

name: mysql

env:

- name: MYSQL_ROOT_PASSWORD

valueFrom:

secretKeyRef:

name: mysql-pass

key: password

ports:

- containerPort: 3306

name: mysql

volumeMounts:

- name: mysql-persistent-storage

mountPath: /var/lib/mysql

volumes:

- name: mysql-persistent-storage

persistentVolumeClaim:

claimName: mysql-pv-claim

  • wordpress-deployment.yaml 내용
더보기

# wordpress-deployment.yaml

apiVersion: v1

kind: Service

metadata:

name: wordpress

labels:

app: wordpress

spec:

ports:

- port: 80

selector:

app: wordpress

tier: frontend

type: LoadBalancer

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: wp-pv-claim

labels:

app: wordpress

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 20Gi

---

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2

kind: Deployment

metadata:

name: wordpress

labels:

app: wordpress

spec:

selector:

matchLabels:

app: wordpress

tier: frontend

strategy:

type: Recreate

template:

metadata:

labels:

app: wordpress

tier: frontend

spec:

containers:

- image: wordpress:4.8-apache

name: wordpress

env:

- name: WORDPRESS_DB_HOST

value: wordpress-mysql

- name: WORDPRESS_DB_PASSWORD

valueFrom:

secretKeyRef:

name: mysql-pass

key: password

ports:

- containerPort: 80

name: wordpress

volumeMounts:

- name: wordpress-persistent-storage

mountPath: /var/www/html

volumes:

- name: wordpress-persistent-storage

persistentVolumeClaim:

claimName: wp-pv-claim

 

 

5. yaml 파일 적용 및 확인

  • kustomization.yamlWordpress 사이트와 MySQL 데이터베이스를 배포하는 모든 리소스를 포함
  • 다음과 같이 디렉토리 적용 가능
$ kubectl apply k ./

 

  • 적용 확인
# 시크릿 존재 확인
$ kubectl get secrets


# 퍼시스턴트 볼륨이 동적으로 프로비저닝이 되었는지 확인
$ kubectl get pvc


# 파드 확인
$ kubectl get pods


# 워드프레스 서비스가 실행중인지 확인
$ kubectl get services wordpress


# 워드프레스 서비스 IP주소 확인
$ minikube service wordpress —url

 

6. 웹 브라우저를 통한 확인

  • kubectl을 통한 pvc, service, url 확인 커맨드

  • URL 주소를 복사하여 웹 브라우저에서 사이트 확인

  • Wordpress 설치 환경 설정

 

7. 성공 화면

 

 

 

728x90

댓글()

[Docker] Docker, Docker-ce 설치

IT_Engineer/클라우드|2020. 11. 2. 19:48
728x90

0. 설치 환경

  • CentOS
    • 권장 사양 : CentOS 7 64bit 이상
    • 낙서쟁이 사양 : CentOS Linux release 7.8.2003 (Core)
  • Kubernetes 구축을 위한 사양 (꼭 잘 확인하세요!! 확인 안하고 했다가, VM 지우고 다시 설치한 1인)

1. Docker 설치

  • 목적 : 컨테이너 이미지를 생성, 관리, 공유
  • 기존에 설치된 경우, 구버전 삭제 
# yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ Docker-logrotate \ docker engine

 

    • Docker-CE 설치를 위한 필수 패키지 설치 및 저장소 설정
## 필수 패키지( yum-utils 설치)
# sudo yum install -y yum-utils device-Mapper-persistent-data lvm2

## docker-ce stable 저장소 설정
#sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • stable이 아닌 edge나 test를 사용하려는 경우에도, stable 저장소는 반드시 설정 필요
  • edge 활성화 : sudo yum-config-manager --enable docker-ce-edge
  • test 활성화 : sudo yum-config-manager --enable docker-ce-test
  • edge나 test 저장소를 비활성화하련면, --enable을 --disable로 변경

 

  • Doiucker daemon에 insecure-registries 등록
# vi /etc/docker/daemon.json
{
    "insecure-registries": ["{IP}:5000"]
}

 

  • Docker 설치
# yum install -y docker-ce docker-ce-cli containerd.io
  • docker-ce : daemon 프로세스가 있는 서버
  • docker-ce-cli : docker daemon과 통신하고 지시하는데 사용할 수 있는 인터페이스를 지정하는 API
  • containerd.io : pod에서 컨테이너를 실행하기 위한 컨테이너 런타임

 

 

  • Docker 실행
# systemctl enable docker
# systemctl restart docker 
# systemctl status docker
  • 재시작 시 Docker가 자동실행되도록 설정
  • 아래와 같은 상태가 나오면 성공!

 

728x90

댓글()