Skip to main content

k0s


설치

curl -sSLf https://get.k0s.sh | sudo K0S_VERSION=v1.27.10+k0s.0 sh

의존성 확인

k0s sysinfo
info

램이 부족한 환경인 경우 swap을 사용할 수 있습니다.

Controller

start

k0s config create > k0s.yaml
k0s.yaml
apiVersion: k0s.k0sproject.io/v1beta1
kind: ClusterConfig
metadata:
name: k0s
spec:
api:
# externalAddress - loadbalancer - controllers
# 모든 클러스터 컴포넌트가 이 주소를 사용하도록 설정
# 새 Node가 추가될 때 사용
externalAddress: <host|ip>
# API에 바인딩할 로컬 주소
address: <host|ip>
# 인증서를 서빙하는 API 서버에 넣을 추가 주소
sans:
- <address>
- <externalAddress>
- <host|ip>
storage:
type: etcd
etcd:
peerAddress: <address>
network:
podCIDR: 10.244.0.0/16 # 10.244.0.1 ~ 10.244.255.255
serviceCIDR: 10.96.0.0/12 # 10.96.0.1 ~ 10.111.255.255
clusterDomain: cluster.local
telemetry:
enabled: false
  • api
    • extraArgs
      • oidc-issuer-url: <url>/.well-known/openid-configuration
      • oidc-client-id: <clientID>
      • oidc-username-claim: email
      • oidc-groups-claim: groups
  • network
    • provider: kuberouter|calico|custom
      • default: kuberouter
      • 네트워크 프로바이더를 변경하는 유일한 방법은 클러스터를 재배포하는 것입니다.
      • cilium 사용하기
    • kubeProxy
      • disabled: true|false

아래 명령어를 통해 controller 서비스를 설치합니다.

sudo k0s install controller \
--config k0s.yaml
  • --enable-worker: controller, worker를 모두 설치합니다.
  • --single: controller + worker, worker를 추가할 수 없습니다.
  • --kubelet-extra-args <extraArgs>: kubelet 옵션
    • --node-ip=<ip>
  • --enable-dynamic-config
    • 동적으로 구성을 변경할 수 있는 기능을 활성화 합니다.
    • spec.api, spec.storage, spec.network.podCIDR, spec.network.serviceCIDR, spec.network.provider는 변경할 수 없습니다.

필요한 포트가 열려있는지 확인합니다.

ProtocolPortServiceDirectionNotes
TCP2380etcd peerscontroller<->controller
TCP6443Kubernetes API Serverworker=>controller
TCP179kube-routerworker<->workerBGP
TCP4789Calicoworker<->workerVXLAN
TCP10250kubeletmaster,worker=>host "*"
TCP9443k0s-apicontroller<->controller
TCP8132konnectivityworker<->controller
sudo k0s start
sudo k0s status
  • --out <format>: json 또는 yaml 형식으로 출력
info

sudo k0s status 값이 안나오거나 에러가 있다고 나오는 경우 아래 명령어를 통해 실행 상태와 로그를 확인할 수 있습니다.

systemctl status k0scontroller
journalctl -xe -u k0scontroller

kubeconfig

sudo k0s kubeconfig create <user>
  • --groups <group>
    • system:masters 그룹은 기본적으로 cluster-admin ClusterRole에 바인딩되어 있습니다.

stop

sudo k0s stop

다시 시작할 일이 없어 완전히 삭제하고 싶은 경우 아래 명령어를 사용합니다.

sudo k0s reset

Worker

token

마스터 노드에서 아래 명령어를 통해 토큰을 생성합니다.

sudo k0s token create --role=worker --expiry=1h > <tokenFile>
cat <tokenFile> | base64 -d | gunzip -

start

작업 노드에서 아래 명렁어를 통해 worker 서비스를 설치합니다.

sudo k0s install worker --token-file <tokenFile>
  • --kubelet-extra-args <extraArgs>: kubelet 옵션
    • --node-ip=<ip>
  • --labels <key>=<value>[,<key>=<vlaue> ...]: Node labels
    • kubernetes.io/role=worker
  • --taints <key>=<value>:<effect>[,<key>=<value>:<effect> ...]: Node taints
    • node.cilium.io/agent-not-ready=true:NoExecute
sudo k0s start
info

sudo k0s status 값이 안나오거나 에러가 있다고 나오는 경우 아래 명령어를 통해 실행 상태와 로그를 확인할 수 있습니다.

systemctl status k0sworker
journalctl -xe -u k0sworker