본문으로 건너뛰기

k0s

설치​

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

의존성 확인​

k0s sysinfo
정보

램이 부족한 환경인 경우 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
  • featureGates: []
    • name: <feature>
    • enabled: <bool>
    • components: ["kube-apiserver|kube-controller-manager|kubelet|kube-scheduler|kube-proxy"]
      • 선언하지 않으면 모든 컴포넌트에 적용됩니다.

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

sudo k0s install controller \
--config k0s.yaml
  • --enable-worker: controller, worker를 모두 설치합니다.
  • --single: controller + worker, worker를 추가할 수 없습니다.
  • --enable-dynamic-config
    • 동적으로 구성을 변경할 수 있는 기능을 활성화 합니다.
    • spec.api, spec.storage, spec.network.podCIDR, spec.network.serviceCIDR, spec.network.provider는 변경할 수 없습니다.
  • worker를 활성화하는 경우 Worker start의 옵션을 사용할 수 있습니다.

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

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

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

systemctl status k0scontroller
journalctl -xe -u k0scontroller

kubeconfig​

sudo k0s kubeconfig create <user> > kubeconfig.yaml
  • --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
  • --kubelet-root-dir /var/lib/k0s/kubelet
    • device-plugin 등에서 /var/lib/kubelet 경로를 사용해야만 하는 경우 이 옵션으로 k0s 기본 경로를 변경할 수 있습니다.
경고

/var/lib/kubelet 경로를 사용하는 경우 클러스터 제거 시 해당 경로가 삭제되었는지 반드시 확인하시기 바랍니다.

sudo k0s start
정보

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

systemctl status k0sworker
journalctl -xe -u k0sworker