kubernetes에서는 네임 스페이스를 줘서 상태 정보를 확인한다.
$ kubectl get pods -n capture
NAME READY STATUS RESTARTS AGE
phantom-server-f597bbbb6-24pww 1/1 Running 0 1d
phantom-server-f597bbbb6-2vljz 1/1 Running 0 1d
phantom-server-f597bbbb6-z7fk5 1/1 Running 0 1d
특정 노드에 대한 로그를 확인할 때도 네임 스페이스를 지정해야 한다.
$ kubectl logs -f phantom-server-f597bbbb6-24pww -n capture
(로그)
따라서 3개의 pods를 모두 보려면 pod 별로 호출해야 한다.
하지만,
https://github.com/wercker/stern를 사용하면 예쁘게 많은 pods 로그를 쉽게 볼 수 있다.
맥이라면 brew install stern으로 설치한다.
$ stern phantom-server-f597bbbb6-z7fk5 --namespace capture
(예쁘게 로그)
3개의 포드에 대한 로그를 보려면 다음 커맨드를 실행한다.
$ stern phantom-server --namespace capture
또한 동일한 방식으로 ingress 로그도 출력할 수 있다.
$ kubectl logs ingress-nginx-controller-lh75d -n ingress-nginx
->
$ stern ingress-nginx-controller -n ingress-nginx
Posted by 김용환 '김용환'
default namespace 앱을 새로운 namespace로 옮길 때 이슈가 발생할 수 있다.
k8s는 기본적으로 기존 정보를 모른다.
default namespace에 올린 service,ingress,pods는 그대로 둔채..
새로운 namespace에 service, ingress,pods는 뜬다.
이때 ingress는 같은 포트를 사용하기 때문에 에러가 당연히 발생한다.
디폴트의 ingress는 종료시키고, 새로운 namespace의 ingress는 떠있게 한다.
그리고 default service, pods도 일일이 종료 시킨다.
다음과 같이 나오면 정상이다.
$ kubectl get ingress
x
$ kubectl get ingress -n <새로운 namespace>
새로운 ingress
Posted by 김용환 '김용환'
<mac OS>
시스템 환경설정 ->
네트워크 ->
이더넷(또는 와이파이)에서 고급 선택 ->
하드웨어 탭에서 MAC 주소
<윈도우>
윈도수 ->
설정 ->
네트워크 및 인터넷 ->
Wi-Fi -> 하드웨어 속성 (또는) 이더넷 -> 하드웨어 속성 ->
물리적 주소(MAC)
Posted by 김용환 '김용환'
Service, Ingress 설정을 주고 ingress 확인하기
아래와 같은 k8s으로 kubectl apply 적용했다.
---
apiVersion: v1
kind: Service
metadata:
name: phantomjs-service
spec:
ports:
- port: 80
protocol: TCP
targetPort: 3001
selector:
app: phantom-server
---
apiVersion: app/v1beta2
kind: Ingress
metadata:
name: phantomjs-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/rewrite-target: /
ingress.kubernetes.io/proxy-body-size: 10m
nginx.org/client-max-body-size: 10m
spec:
rules:
- host: capture.internal.google.com
http:
paths:
- path: /
backend:
serviceName: phantomjs-service
servicePort: 80
ingress-nginx 네임스페이스를 확인한다.
$ kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
default-backend-55d45476bb-q9cwd 1/1 Running 0 14d
ingress-nginx-controller-ff5ht 1/1 Running 0 1d
docker에서 다음을 실행하면 nginx 설정을 확인할 수 있다.
$ kubectl -n ingress-nginx exec -it ingress-nginx-controller-ff5ht /bin/bash
쉘) cat /etc/nginx/nginx.conf
지금까지의 작업을 한 커맨드로 사용해 namespace에 nginx ingress가 하나 밖에 없다면 다음과 같이 쉽게 볼 수 있다.
$ kubectl exec -it -n ingress-nginx $(kubectl -n ingress-nginx get pods | grep ingress-nginx-controller | grep Running | awk '{print $1}' | head -n 1) cat /etc/nginx/nginx.conf
ingress docker 내부 vi로 보고 싶다면, vi가 설치가 안되어 있어서 보기 어렵다. '| vi - '를 추가한다.
$ kubectl exec -it -n ingress-nginx $(kubectl -n ingress-nginx get pods | grep ingress-nginx-controller | grep Running | awk '{print $1}' | head -n 1) cat /etc/nginx/nginx.conf | vi -
Posted by 김용환 '김용환'
'근성없고 화내는'이라는 뜻이 있지만
(참고 https://reckon.tistory.com/2186)
소프트웨어 세상에서는
ansible과 같은 설정 관리 툴로 특정 OS에서 소프트웨어/애플리케이션을 설치 및 설정 한후
운영을 진행하다 세월이 흘러, 운영체제와 설치소프트웨어도 조금씩 달라진다. 따라서 ansible만 해도 조금씩 playbook을 다르게 써야 하는 경우가 있다.
이런 환경을 snowflake(눈송이) 시스템이라고 한다.
도커 환경에서 이런 운영 환경을 이겨낼 수 있기에
docker/cloud /kubernetes 환경에서 기존 레거시와 차별하기 위해 사용되고 있다.
Posted by 김용환 '김용환'
nginx를 ingress로 사용하는 kubernetes에서 body 크기(jpeg같은 image)때문에 ingress를 통과 못할 수 있다. 413 에러가 나타나는 이유이다.
이럴 때는 client_max_body_size를 설정한다.
ingress.kubernetes.io/proxy-body-size: 10m
참고
https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md#custom-max-body-size
Posted by 김용환 '김용환'
namespace를 쿠버네티스 deployment 설정에 넣는 것이 좋은 줄 알았는데,
막상 운영해보니, ingress에 namespace에 영향을 미치고
공통 파일 관리가 어렵다.
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: phantom-server
namespace: phantom
namespace를 커맨드 라인에서 전달한다면 편하다.
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: phantom-server
$ kubectl apply -f kubernetes.yml --namespace=phantom
Posted by 김용환 '김용환'
deployment -> pods 생성했다면.
pods 먼저 삭제하면 다시 실행되기 때문에..
deployment -> pods 순서대로 삭제해야 한다.
[~] kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
phantom-server 1 1 1 1 51m
[~] kubectl get pods
NAME READY STATUS RESTARTS AGE
phantom-server-649c56b6b7-nkmjd 1/1 Running 0 18m
[~] kubectl get pods
NAME READY STATUS RESTARTS AGE
phantom-server-649c56b6b7-wgtdl 1/1 Running 0 1m
[~]
[~]
[~]
[~] kubectl get pods
NAME READY STATUS RESTARTS AGE
phantom-server-649c56b6b7-mtxn8 1/1 Running 0 28m
[~] kubectl delete pods phantom-server-649c56b6b7-mtxn8
pod "phantom-server-649c56b6b7-mtxn8" deleted
[~] kubectl get pods
NAME READY STATUS RESTARTS AGE
phantom-server-649c56b6b7-mtxn8 1/1 Terminating 0 28m
phantom-server-649c56b6b7-wgtdl 1/1 Running 0 21s
->
[~] kubectl delete deployment phantom-server
deployment.extensions "phantom-server" deleted
[~] kubectl delete pods phantom-server-649c56b6b7-nkmjd
pod "phantom-server-649c56b6b7-nkmjd" deleted
마찬가지로
cronjob -> job -> pods 로 생성된다면
먼저 cronjob을 생성하고 차례대로 job, pods를 삭제해야 제대로 삭제된다.
하지만, namespace를 삭제하면 namespace 밑의 모든 service, ingress, nodeport, pods가 삭제되니 참고..
Posted by 김용환 '김용환'
MacOS에서
특정 도메인에 내가 보고 싶은 ip를 보고 싶으면, 다음과 같이 진행한다.
리눅스에서는 /etc/hosts만 진행하면 되나, MacOS에서는 dns cacheflush를 따로 호출해야 한다.
<ip 설정 (1대 반영 장비) >
$sudo vi /private/etc/hosts
192.168.38.93 shopping.google.com
$dscacheutil -flushcache
Posted by 김용환 '김용환'
도커 파일을 빌드할 때 패키지 관리자와 interative하게 제어할 수 없다..
yum을 사용할 때는 어떠한 interative 입력을 받지 않도록 -y를 사용하는 반면,
apt-get은 interactive 입력을 받지 않도록 다음과 같이 사용해야 한다.
DEBIAN_FRONTEND=noninteractive
예)
FROM ubuntu:18.04
RUN apt-get update -q \
&& DEBIAN_FRONTEND=noninteractive apt-get install -qy mysql-client
Posted by 김용환 '김용환'
댓글을 달아 주세요