설치없이 online k8s 사용방법

Katacoda

https://www.katacoda.com/courses/kubernetes/playground

 

Kubernetes Playground | Katacoda

Use Kubernetes in a hosted sandboxed interactive environment

www.katacoda.com

katacoda system

 

 

Docker playground

https://labs.play-with-k8s.com/

 

Play with Kubernetes

Play with Kubernetes is a labs site provided by Docker and created by Tutorius. Play with Kubernetes is a playground which allows users to run K8s clusters in a matter of seconds. It gives the experience of having a free Alpine Linux Virtual Machine in bro

labs.play-with-k8s.com

Docker playground

 

 

 

로컬 PC에 k8s 설치하는 방법

 

설치환경 : ubuntu 18.04 virtual-box

설치노드

  • Master Node x 1
  • Slave Node x 2

kubernetes 설치

  1. Docker 설치

  • # apt install docker.io

2. Kubeadm 설치(https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)

공식사이트 설치 명령어 실행

 

kubeadm 설치완료

  • kubeadm
    • 클러스터를 부트스트랩하는 명령
  • kubelet
    • 클러스터의 모든 시스템에서 실행되는 구성 요소로, Pod 및 컨테이너 시작과 같은 작업을 수행
  • kubectl
    • 쿠버네티스 클러스터를 제어하기 위한 커맨드라인 도구

3. Master Node 복제

복제 선택

  • MAC주소 초기화 선택

  • 완전한 복제 선택

  • 현재 머신 상태 선택

  • Master Node x1, work Node x2 설치

  • NatNetwork 추가

  • 각 Node에 위에서 생성한 NatNetwork 추가

  • Node들을 구동하여 상호 Node간 ping 확인

 

  • Master와 work node의 hostName 변경
    • 각 노드의 /etc/hostname 파일에서 hostname변경

 

kubeadm init 시도(error)

  • # kubeadm init
    • swap기능이 on상태이므로 error가 발생.
  • master노드와 work노드의 swap 기능을 전부 끈다
    • # swapoff -a (swap기능을 끔)
      • -- reboot시 swap off 유지되지는 않음.
    • # sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab 
      • -- reboot시 swapoff 유지

kubeadm init 재시도

  • user권한으로 아래 3개의 명령어를 입력
    • # mkdir -p $HOME/.kube
    • # sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • # sudo chown $(id -u):$(id -g) $HOME/.kube/config

work node join

  • work노드에서 join명령어를 실행한다.
  • # kubeadm join 192.168.35.79:6443 --token b83n95.m91axbvrm2l70inl \  --discovery-token-ca-cert-hash sha256:84d994db7cfa3cfd8eca10e2a7ab6dc6551c860cfea526d1dd720e2b8259a1d2
    • kubeadm init 명령어 성공후 맨하단에 나오는 join명령어를 실행

MasterNode에서 workNode join확인

 

CNI(Container Network Interface) 설치

  • Pod Network
  • Container간 통신을 지원하는 VxLAN
  • 다양한 종류의 플러그인이 존재

 

Weave Net 설치(www.weave.works/docs/net/latest/kubernetes/kube-addon/)

 

 

 

auto completion 적용

https://kubernetes.io/docs/reference/kubectl/cheatsheet/

 

kubectl Cheat Sheet

This page contains a list of commonly used kubectl commands and flags. Kubectl autocomplete BASH source <(kubectl completion bash) # setup autocomplete in bash into the current shell, bash-completion package should be installed first. echo "source <(kubect

kubernetes.io

 

 

 

MiniKube 설치

설치환경: virtual box(Ubuntu 18.04.2)

 

Docker 설치

  • # sudo apt install docker.io -y
  • # sudo chmod 666 /var/run/docker.sock

http://minikube.sigs.k8s.io/docs/start/

  • # curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
  • # sudo dpkg -i minikube_latest_amd64.deb
  • # minikube start --driver=docker
  • # sudo snap install kubectl --classic

 

 

 

TroubleShooting

k8s 1.22버전부터는 systemd와 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

https://kubernetes.io/ko/docs/setup/production-environment/container-runtimes/#%EB%8F%84%EC%BB%A4

 

컨테이너 런타임

파드가 노드에서 실행될 수 있도록 클러스터의 각 노드에 컨테이너 런타임을 설치해야 한다. 이 페이지에서는 관련된 항목을 설명하고 노드 설정 관련 작업을 설명한다. 이 페이지에는 리눅스

kubernetes.io

 

 

 

k8s 기본명령어 테스트

k8s 버전확인

k8s 버전정보

  • # kubectl version --short

 

 

 

k8s 약어확인

k8s 명령어 약어 확인

  • # kubectl api-resources

 

 

 

K8s service API 버전확인

  • kubectl explain <service name>
    • # kubectl explain pod
    • #kubectl explain deployment

 

 

 

Deployment 생성

deployment 생성

  • # kubectl create deployment mainui --image=httpd:latest --replicas=3

 

 

 

Docker 이미지 빌드 및 deployment 생성

컨테이너 이미지 만들기

  • Docker 이미지 빌드
    • # docker build -t http go .

 

컨테이너 푸시

  • docker 이미지 태깅
    • # docker tag test-go fastwon1/test-go
  • Docker.io repository에 push
    • # docker push fastwon1/test-go

 

deployment

  • default ns의 전체 pod 정보 확인
    • # kubectl get pods
  • 이미지 디플로이먼트
    • # kubectl create deployment test-go --image=fastwon1/test-go
      • kubectl create deploy --image alpine:3.4 alpine-deploy --dry-run=client
      • kubectl create deploy --image alpine:3.4 alpine-deploy --dry-run=client -o yaml > alpine.yaml
        • yaml 파일 output
      • # kubectl create -f ./jenkinks.yaml --record=true
  • 디플로이먼트 조회
    • # kubectl get deployment
  • 레플리카셋 조회
    • # kubectl get rs
  • 서비스 조회
    • # kubectl get svc
      • # kubectl get svc -w (-w 옵션:모니터링)

 

expose
expose 확인

  • 서비스 외부노출
    • # kubectl expose deployment test-go --name test-go-svc --port=8080 --type=LoadBalancer
    • # kubectl expose deployment pod-jenkins --name srv-jenkins --dry-run=client --port 8080 -n blue -o yaml >> blue-jenkins-svc.deploy.yaml

 

deployment 및 svc 삭제

  • 디플로이먼트 삭제
    • # kubectl delete deployment test-go
  • 서비스 삭제
    • # kubectl delete svc test-go-svc

 

scaleout

  • 스케일아웃
    • # kubectl scale deploy test-go --replicas=3

 

직접 앱에 접근

  • 해당 컨테이너에 curl명령어 실행
    • # kubectl exec test-go-8677f85fb6-5pzm5 -- curl 10.4.3.228:8080 -s

 

앱 위치 및 포드정보 확인

  • 다중 Pod정보 자세히 출력
    • # kubectl get pod -o wide
  • 단일 Pod정보 자세히 출력
    • # kubectl describe pod test-go-8677f85fb6-5pzm5

 

pod bash 터미널 접속

  • 컨테이너 bash접속
    • # kubectl exec -it fastwon1-jenkins-77fc6594dd-lrclv -- bash
    • kubectl exec -it busybox-pod -- sh

 

테스트 bash

  • kubectl run -it --rm --image busybox -- bash

 

 

etcd

 

  • 명령어
    • 모든 key 조회
      • sudo ETCDCTL_API=3 ./etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key get / --prefix --keys-only
    • key put
      • sudo ETCDCTL_API=3 ./etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key put key1 value1
    • key get
      • sudo ETCDCTL_API=3 ./etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key get key1

key put/get

 

snapshot 생성 및 상태확인

 

  • 백업 명령어
    • sudo ETCDTCL_API=3 ./etcdctl --endpoints 127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key snapshot save snapshotdb
  • 복구 명령어
    • sudo ETCDTCL_API=3 ./etcdctl --endpoints=127.0.0.1:2379 --cacert /etc/kubernetes/pki/etcd/ca.crt --cert /etc/kubernetes/pki/etcd/server.crt --key /etc/kubernetes/pki/etcd/server.key --data-dir /var/lib/etcd-restore --initial-cluster='master=https://127.0.0.1:2380' --name=master --initial-cluster-token this-is-token --initial-advertise-peer-urls https://127.0.0.1:2380 snapshot restore ~/yaml/snapshotdb

 

  • data-dir path 수정
  • initial-cluster-token 추가

 

  • hostPath의 path 수정

'클라우드 > K8s' 카테고리의 다른 글

K8s namespaces  (0) 2022.03.17
K8s Pod 구성패턴  (0) 2022.03.17
POD  (0) 2022.03.17
K8s 동작원리  (0) 2022.03.17
Kubernetes?  (0) 2022.03.17

+ Recent posts