반응형

1. pods 전체삭제

 # Pods 전체 삭제
 kubectl delete pods --all --all-namespaces
 kubectl delete pods --all -A
 
 # Namespace 별 삭제
 kubectl delete pods --all -n test

 

 

2. pods 특정 이름으로 삭제

<namespace> 자리에 namespace 입력 - test

/application/ 자리에 삭제할 이름 입력 - /nginx/

kubectl get pods -n <namespace> --no-headers=true | awk '/application/{print $1}'| xargs  kubectl delete -n <namespace> pod

#namesapce가 test이고 test namespace안에 nginx라는 이름이 들어가는 pods 전체 삭제
kubectl get pods -n test --no-headers=true | awk '/nginx/{print $1}'| xargs  kubectl delete -n test pod

 

 

참고 : 

https://www.baeldung.com/linux/kubernetes-delete-all-pods

https://stackoverflow.com/questions/59473707/kubernetes-pod-delete-with-pattern-match-or-wildcard

반응형
반응형

 

Version

- Ubuntu 20.04

- Docker 24.0.5

- kubernetes 1.28.0

 

※ Master 1대 Woker 2대

 

1. 전부 root 계정으로 시작한다.

sudo -i

 

2. 모든 서버 Hostname 변경

변경 안 할 시 node 등록할 때 에러 발생

# Master server 1
hostnamectl set-hostname Master

# Worker server 1
hostnamectl set-hostname Node1

# Worker server 2
hostnamectl set-hostname Node2

 

3. Docker 설치 (Master, Woker 전부 진행)

apt-get update
apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
 echo \
  "deb [arch=$(dpkg --print-architecture) 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
apt-get update
# 도커까지 설치
apt-get install docker-ce docker-ce-cli containerd.io

# containerd만 설치할경우
apt-get install containerd.io

모든 서버에 설치 후 Docker Version 확인

 docker version

 

4. Kubernetes (k8s) 설치 (Master, Worker 전부 실행)

swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab

 

iptable 설정

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
sysctl --system

 

kubectl, kubeadm, kubelet 설치

(2024.03.12 기준 https://kubernetes.io/blog/2023/08/15/pkgs-k8s-io-introduction/#how-to-migrate 해당URL을 보고 curl 과 deb 설정한다)

apt-get update
apt-get install -y apt-transport-https ca-certificates curl

 

curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg| gpg -o /usr/share/keyrings/kubernetes-archive-keyring.gpg --dearmor
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
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
systemctl daemon-reload
systemctl restart kubelet

 

5. kubeadm init (Master에만 진행)

kubeadm init 실행시 아래 에러 발생

unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService" 

참고 : https://kubernetes.io/docs/setup/production-environment/container-runtimes/

(Configuring the systemd cgroup driver의 Note 부분 참고)

해당 작업만 모든 서버(Master, Worker에서 진행)

# 해당작업만 모든 서버(Master, Worker)에서 진행
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
systemctl restart containerd

작업 후 아래 명령어 진행

kubeadm init

정상적으로 성공할 경우 아래 값 반환 해당값 메모장에 임시 저장

kubeadm join 192.x.x.x:6443 --token c5l89v.9ao1r5texepx06d8 \
	--discovery-token-ca-cert-hash sha256:50cb3eaxe334612e81c2342790130801afd70ddb9967a06bb0b202141748354f

모든 User를 위해 명령어 등록

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

 

6. Pod Network 설치 (Master에서만 진행)

https://cloud.weave.works 서버가 이상하므로 github에서 다운받는다. 현재 작성일 기준 2.8.1이 최신

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s-1.11.yaml

 

7. Node 등록 (Woker에서만 진행)

5번에서 저장한 kubeadm join 입력

kubeadm join 192.x.x.x:6443 --token c5l89v.9ao1r5texepx06d8 \
	--discovery-token-ca-cert-hash sha256:50cb3eaxe334612e81c2342790130801afd70ddb9967a06bb0b202141748354f

 

8. Master에서 확인

Master에서 아래 명령어 실행

kubectl get nodes -o wide

해당 가이드대로 진행하였으면 아래 사진에서 ubuntu -> master로 나와야함

 

 

반응형
반응형

시크릿(Secret) - https://kubernetes.io/ko/docs/concepts/configuration/secret/

시크릿은 암호, 토큰 또는 키와 같은 소량의 중요한 데이터를 포함하는 오브젝트이다. 이를 사용하지 않으면 중요한 정보가 파드 명세나 컨테이너 이미지에 포함될 수 있다. 시크릿을 사용한다는 것은 사용자의 기밀 데이터를 애플리케이션 코드에 넣을 필요가 없음을 뜻한다.

 

쿠버네티스에서 Deployment.yaml 작성시 Private Docker Registry, Nexus, Harbor 와 같은 것에 있는 이미지를 가져올 때Pull 권한이 없다고 하는 경우가 있다. 이 경우 secret 생성 후  deployment.yaml에 imagePullSecrets를 입력하면된다.(물론 모든 Worker Node에 docker login해주면되긴하지만, 항상 해당 registry 만 사용할건아니니까...)

 

1. secret 생성

secret 생성시 주의할 점은 namespace가 있을 경우 뒤에 -n 옵션을 통해 namespace를 설정해주어야한다.

없으면 default로 설정되며, 해당 pod가 namespace를 가질 경우 반드시 namespace를 설정해주어야한다.

1.1 default

kubectl create secret docker-registry secret-name \
  --docker-email=test@test.com \  # 이 부분은 생략가능
  --docker-username=harborId \ 
  --docker-password=harborPw \
  --docker-server=http://harborurl.com  # harbor or nexus or private registry

1.2 namesapce

kubectl create secret docker-registry secret-name \
  --docker-email=test@test.com \  # 이 부분은 생략가능
  --docker-username=harborId \ 
  --docker-password=harborPw \
  --docker-server=http://harborurl.com \ # harbor or nexus or private registry
  -n namespaceoption

 

2. imagePullSecrets 추가

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test
        image: harborurl.com:latest
      imagePullSecrets:
      - name: secret-name # secret에서 생성한 이름

 

반응형

'Develop > k8s' 카테고리의 다른 글

ETCD Leader 및 List 조회  (0) 2023.11.21
k8s pods 전체 삭제 및 특정 이름 전체 삭제  (0) 2023.11.09
Ubuntu 20.04 kubernetes(k8s) 설치  (0) 2023.08.21
Nginx Ingress Controller Annotations 설정  (0) 2022.12.08
Pod Scheduling  (0) 2022.09.26
반응형

Nginx Ingress Controller 사용시 Nginx 와 관련된 기본적인 설정할 때 Annotaions기능을 통해 적용할 수 있다

예를들면 기본적으로 Nginx Ingress Controller 에 client_max_body_size 가 1m로 설정되어있는데,

ingress.yaml 의 Annotations을 통해 Nginx Controller Pod에 접속하지 않아도 Nginx 설정을 할 수 있다.

 

단, Nginx Ingress Controller의 경우 kubernetes Ingress Controller(Community Version)와

Nginx Ingress Controller가 있는데, 이를 잘 보고 적용해야한다.

 

1. kubernetes Ingress Controller(Community Version)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress-with-annotations
  annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: 8m   
spec:
  rules:
     ...

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/

 

2. Nginx Ingress Controller

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress-with-annotations
  annotations:
    nginx.org/client-max-body-size: 4m
spec:
  rules:
     ...

https://docs.nginx.com/nginx-ingress-controller/configuration/ingress-resources/advanced-configuration-with-annotations

 

 

반응형

'Develop > k8s' 카테고리의 다른 글

ETCD Leader 및 List 조회  (0) 2023.11.21
k8s pods 전체 삭제 및 특정 이름 전체 삭제  (0) 2023.11.09
Ubuntu 20.04 kubernetes(k8s) 설치  (0) 2023.08.21
k8s Docker Private Registry(Nexus, Harbor) secret  (0) 2023.01.16
Pod Scheduling  (0) 2022.09.26
반응형

1. Label Selector

kubectl get nodes --show-labels

 

kubectl label ndoes [nodeName] [key=value]
spec:
  nodeSelector:
    key: value

2. cordon / uncordon

kubectl cordon [nodeName]
kubectl uncordon [nodeName]

 

3. Affinity

반응형

+ Recent posts