설치없이 online k8s 사용방법
Katacoda
https://www.katacoda.com/courses/kubernetes/playground
Kubernetes Playground | Katacoda
Use Kubernetes in a hosted sandboxed interactive environment
www.katacoda.com

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

로컬 PC에 k8s 설치하는 방법
설치환경 : ubuntu 18.04 virtual-box
설치노드
- Master Node x 1
- Slave Node x 2

kubernetes 설치
- Docker 설치

- # apt install docker.io
2. Kubeadm 설치(https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-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
- swap기능이 on상태이므로 error가 발생.
- master노드와 work노드의 swap 기능을 전부 끈다
- # swapoff -a (swap기능을 끔)
- -- reboot시 swap off 유지되지는 않음.
- # sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
- -- reboot시 swapoff 유지
- # swapoff -a (swap기능을 끔)


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

CNI(Container Network Interface) 설치
- Pod Network
- Container간 통신을 지원하는 VxLAN
- 다양한 종류의 플러그인이 존재
Weave Net 설치(www.weave.works/docs/net/latest/kubernetes/kube-addon/)

- # kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
- STATUS Ready 상태 확인
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 버전확인

- # kubectl version --short
k8s 약어확인

- # kubectl api-resources
K8s service API 버전확인

- kubectl explain <service name>
- # kubectl explain pod
- #kubectl explain 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

- 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 create deployment test-go --image=fastwon1/test-go
- 디플로이먼트 조회
- # kubectl get deployment
- 레플리카셋 조회
- # kubectl get rs
- 서비스 조회
- # kubectl get svc
- # kubectl get svc -w (-w 옵션:모니터링)
- # kubectl get svc


- 서비스 외부노출
- # 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

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

- 스케일아웃
- # 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

- 컨테이너 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 조회


- 백업 명령어
- 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 |