Oracle의 수석 컨설턴트의 k3s 여정 : 노트북에서 Ubuntu 및 k3s를 사용하여 VM을 빠르게 시작

마크 라 메릭스

그는 1995 년에 Oracle에 입사했으며 현재 Oracle Cloud, Kubernetes, Docker 등에 중점을 둔 Oracle SOA의 수석 컨설턴트입니다.

저는 minikube를 공부하고 있었기 때문에 교육 및 시연을 위해 제 자신의 Windows 노트북에 적합한 환경이 설치되어 있습니다. 환경에는 Oracle VirtualBox 장치에 Guest OS, Docker 및 Minikube가 있습니다. 데모 환경은 Vagrantfile, 스크립트 및 Kubernetes 매니페스트 (yaml) 파일을 사용합니다. 그래서 이번에는 데모를 위해 k3s를 사용하겠습니다.

이 기사에서는 Vagrant의 도움으로 Oracle VirtualBox 장치의 Ubuntu Guest OS에 k3s 및 Kubernetes Dashboard를 설치하는 자세한 단계를 보여줍니다.

k3s 설치

공식 웹 사이트 (k3s.io)의 도입에 따르면 k3s 설치 과정은 오래 걸리지 않을 것입니다.

curl -sfL https://get.k3s.io | sh -
 # Check for Ready node, 
 takes maybe 30 seconds
 k3s kubectl get node

설명서에 따르면 다음 명령 (및 환경 변수 INSTALL_K3S_VERSION)을 사용하여 github에서 다운로드 한 특정 버전의 k3를 지정합니다.

curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.0.1 sh -

데모 환경을 설정하기 전에 k3s의 요구 사항을 살펴 보겠습니다.

운영 체제

K3는 모든 Linux 버전에서 실행할 수 있어야합니다. 그러나 k3s는 다음 운영 체제 및 후속 비 주요 버전에서 테스트되었습니다.

  • Ubuntu 16.04 (amd64)

  • Ubuntu 18.04 (amd64)

  • Raspbian Buster (armhf)

하드웨어 장비

하드웨어 요구 사항은 배포 규모에 따라 확장됩니다. 권장되는 최소 요구 사항은 다음과 같습니다.

  • RAM : 512MB

  • CPU : 1 핵

k3s의 버전은 작성 당시 최신 버전 v1.0.1을 선택했습니다.

여기에 사진 설명 삽입

Vagrantfile

운영 체제의 k3s 요구 사항에 따라 Vagrant Box 검색 페이지를 사용하여 Ubuntu 18.04 Vagrant Box (VirtualBox 용)를 검색했습니다.

여기에 사진 설명 삽입

ubuntu / bionic64 선택

기존 데모 환경에서 Vagrantfile의 내용을 다음과 같이 변경했습니다.


Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  
  config.vm.define "ubuntu_k3s" do |ubuntu_k3s|
  
    config.vm.network "forwarded_port",
      guest: 8001,
      host:  8001,
      auto_correct: true
     
    config.vm.network "forwarded_port",
      guest: 9110,
      host:  9110,
      auto_correct: true
      
    config.vm.provider "virtualbox" do |vb|
        vb.name = "Ubuntu k3s"
        vb.memory = "8192"
        vb.cpus = "1"
        
      args = []
      config.vm.provision "shell",
          path: "scripts/k3s.sh",
          args: args
    end
    
  end

end

스크립트 디렉토리에서 다음 내용으로 k3s.sh 파일을 만들었습니다.

#!/bin/bash
echo "**** Begin installing k3s"

#Install
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.0.1 sh -

echo "**** End installing k3s"

Windows 랩톱의 env라는 하위 디렉토리에서 Windows 명령 프롬프트 (cmd)를 열고 다음을 입력합니다.vagrant up

이 명령은 Vagrantfile을 기반으로 게스트 머신을 만들고 구성합니다.

다음은 출력입니다 (k3의 일부만 표시됨).

ubuntu_k3s: **** Begin installing k3s
…
ubuntu_k3s: **** End installing k3s
ubuntu_k3s: **** Begin installing k3s
…
ubuntu_k3s: **** End installing k3s
ubuntu_k3s: **** Begin installing k3s
…
ubuntu_k3s: **** End installing k3s

구성 셸 스크립트가 여러 번 실행되었음을 발견했습니다. 최근 vagrant를 2.2.6으로 업그레이드했기 때문에 업그레이드와 관련이있을 수 있습니다. 내가 찾은 해결책은 다음과 같습니다.

오류 자체는 구성 블록에 이름이 없기 때문입니다. 두 번 실행하지 않으려면 비슷한 이름을 지정하여 수정할 수 있습니다.

config.vm.provision “my shell script”, type: “shell”, ….

그래서 Vagrantfile을 다음과 같이 변경했습니다.


Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  
  config.vm.define "ubuntu_k3s" do |ubuntu_k3s|
  
    config.vm.network "forwarded_port",
      guest: 8001,
      host:  8001,
      auto_correct: true
      
    config.vm.provider "virtualbox" do |vb|
        vb.name = "Ubuntu k3s"
        vb.memory = "8192"
        vb.cpus = "1"
        
      args = []
      config.vm.provision "k3s shell script", type: "shell",
          path: "scripts/k3s.sh",
          args: args
    end
    
  end

end

실행중인 컴퓨터를 중지하고 리소스를 제거하기 위해 Windows 명령 프롬프트에서 다음 명령을 사용했습니다.

vagrant destroy

다음 출력을 생성합니다.

    ubuntu_k3s: Are you sure you want to destroy the ‘ubuntu_k3s’ VM? [y/N] y
==> ubuntu_k3s: Forcing shutdown of VM…
==> ubuntu_k3s: Destroying VM and associated drives…

이 명령은 Vagrant가 관리하는 실행중인 컴퓨터를 중지하고 컴퓨터 생성 프로세스 중에 생성 된 모든 리소스를 파괴합니다. 이 명령을 실행 한 후 컴퓨터는 이전에 게스트 컴퓨터를 생성 한 적이없는 것처럼 깨끗한 상태 여야합니다.

Windows 랩톱의 env라는 하위 디렉토리에서 Windows 명령 프롬프트 (cmd)를 열고 다음을 입력합니다.vagrant up

ubuntu / bionic64 버전과 관련하여 출력은 다음과 같습니다.

==> ubuntu_k3s: Checking if box ‘ubuntu/bionic64’ version ‘20191218.0.0’ is up to date…
==> ubuntu_k3s: A newer version of the box ‘ubuntu/bionic64’ for provider ‘virtualbox’ is
==> ubuntu_k3s: available! You currently have version ‘20191218.0.0’. The latest is version
==> ubuntu_k3s: ‘20200107.0.0’. Run `vagrant box update` to update.

다음 출력을 생성합니다 (k3의 일부만 표시됨).

   ubuntu_k3s: **** Begin installing k3s
    ubuntu_k3s: [INFO]  Using v1.0.1 as release
    ubuntu_k3s: [INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.0.1/sha256sum-amd64.txt
    ubuntu_k3s: [INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.0.1/k3s
    ubuntu_k3s: [INFO]  Verifying binary download
    ubuntu_k3s: [INFO]  Installing k3s to /usr/local/bin/k3s
    ubuntu_k3s: [INFO]  Creating /usr/local/bin/kubectl symlink to k3s
    ubuntu_k3s: [INFO]  Creating /usr/local/bin/crictl symlink to k3s
    ubuntu_k3s: [INFO]  Creating /usr/local/bin/ctr symlink to k3s
    ubuntu_k3s: [INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
    ubuntu_k3s: [INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
    ubuntu_k3s: [INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
    ubuntu_k3s: [INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
    ubuntu_k3s: [INFO]  systemd: Enabling k3s unit
    ubuntu_k3s: Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service ? /etc/systemd/system/k3s.service.
    ubuntu_k3s: [INFO]  systemd: Starting k3s
    ubuntu_k3s: **** End installing k3s

ubuntu / bionic64 버전에 대한 경고로 인해 Windows 명령 프롬프트에서 언급 된 명령을 사용했습니다.

vagrant box update

다음 출력을 생성합니다.


==> ubuntu_k3s: Checking for updates to ‘ubuntu/bionic64’
    ubuntu_k3s: Latest installed version: 20191218.0.0
    ubuntu_k3s: Version constraints:
    ubuntu_k3s: Provider: virtualbox
==> ubuntu_k3s: Updating ‘ubuntu/bionic64’ with provider ‘virtualbox’ from version
==> ubuntu_k3s: ‘20191218.0.0’ to ‘20200107.0.0’…
==> ubuntu_k3s: Loading metadata for box ‘https://vagrantcloud.com/ubuntu/bionic64’
==> ubuntu_k3s: Adding box ‘ubuntu/bionic64’ (v20200107.0.0) for provider: virtualbox
    ubuntu_k3s: Downloading: https://vagrantcloud.com/ubuntu/boxes/bionic64/versions/20200107.0.0/providers/virtualbox.box
    ubuntu_k3s: Download redirected to host: cloud-images.ubuntu.com
    ubuntu_k3s:
==> ubuntu_k3s: Successfully added box ‘ubuntu/bionic64’ (v20200107.0.0) for ‘virtualbox’!

나는 vagrant ssh실행중인 VM 연결하고 뭔가를 시작했습니다.

다음으로 Linux 명령 프롬프트에서 다음 명령을 사용했습니다.

kubectl get nodes

다음 출력을 생성합니다.


WARN[2020-01-12T13:36:33.705394309Z] Unable to read /etc/rancher/k3s/k3s.yaml, please start server with –write-kubeconfig-mode to modify kube config permissions
error: error loading config file “/etc/rancher/k3s/k3s.yaml”: open /etc/rancher/k3s/k3s.yaml: permission denied

비고 :

k3s (k3s kubectl get node)의 시작 페이지에 언급 된 명령은 동일한 오류 메시지를 표시합니다. 이 경우 현재 사용자 (whoami 명령을 통해)가 다음과 같기 때문입니다.

k3s가 설치되면 다음 명령을 사용합니다 (문서에서도 찾을 수 있음).

sudo kubectl get nodes

다음 출력을 생성합니다.

NAME            STATUS   ROLES    AGE   VERSION
ubuntu-bionic   Ready    master   10m   v1.16.3-k3s.2

문서에 따라 kubeconfig 파일을 /etc/rancher/k3s/k3s.yaml에 작성한 다음 서비스를 자동으로 시작하거나 다시 시작합니다. 설치 스크립트는 k3s 및 kubectl, crictl, k3s-killall.sh 및 k3s-uninstall.sh와 같은 기타 유틸리티를 설치합니다.

다음으로 다음 명령을 사용합니다.


cd /etc/rancher/k3s

ls -latr

다음 출력을 생성합니다.

total 12
-rw——- 1 root root 1052 Jan 12 10:16 k3s.yaml
drwxr-xr-x 2 root root 4096 Jan 12 10:16 .
drwxr-xr-x 4 root root 4096 Jan 12 10:16 ..

다음으로 다음 명령을 사용하여 k3s.yaml 파일의 내용을 봅니다.

sudo cat k3s.yaml

다음 출력을 생성합니다.


apiVersion: v1
clusters:
– cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJWekNCL3FBREFnRUNBZ0VBTUFvR0NDcUdTTTQ5QkFNQ01DTXhJVEFmQmdOVkJBTU1HR3N6Y3kxelpYSjIKWlhJdFkyRkFNVFUzT0RneU5ERTVNekFlRncweU1EQXhNVEl4TURFMk16TmFGdzB6TURBeE1Ea3hNREUyTXpOYQpNQ014SVRBZkJnTlZCQU1NR0dzemN5MXpaWEoyWlhJdFkyRkFNVFUzT0RneU5ERTVNekJaTUJNR0J5cUdTTTQ5CkFnRUdDQ3FHU000OUF3RUhBMElBQk12b3V1YjZTR3N6UVl2LzVyb0lpSE5xbXZ0aUxub2gyQTZzR1hIQyt2OWQKSzkwTVlmV2J2bkozVFhyeEg2Mm5LTDhEU05wcmN4eC9rRXNXM2FpZTV3Q2pJekFoTUE0R0ExVWREd0VCL3dRRQpBd0lDcERBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUJSUmlrd0FPcjFVCmJtTlhOcEw3Y1cxaDhRSGg4QnZJQmJKc2RqdGU3Myt4QWlFQXROUG9MTjliVFZpYmxlYW5SNFpKcStKNUxDMmsKeUUwN2daWlk1NURlc25RPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://127.0.0.1:6443
  name: default
contexts:
– context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
– name: default
  user:
    password: 1f0b266cfdd8e11a9af1a6e262b09746
    username: admin

Kubectl 구성

다음으로 구성에 중점을 둡니다.

기본적으로 kubectl은 $ HOME / .kube 디렉토리에서 config라는 파일을 찾습니다. KUBECONFIG 환경 변수를 설정하거나 –kubeconfig 플래그를 설정하여 다른 kubeconfig 파일을 지정할 수 있습니다.

k3s kubectl 명령과 관련하여 다음 규칙이 적용됩니다.

  • 임베디드 kubectl CLI를 실행하십시오. KUBECONFIG 환경 변수가 설정되지 않은 경우 k3s 서버 노드를 시작할 때 /etc/rancher/k3s/k3s.yaml에 생성 된 구성 파일을 자동으로 사용하려고합니다.

루트 권한이없는 사용자가 이전에받은 경고에 따라 특정 구성으로 kubectl을 사용할 수 있도록 허용하려면 :

/etc/rancher/k3s/k3s.yaml을 읽을 수 없습니다. –write-kubeconfig-mode를 사용하여 서버를 시작하여 kube 구성 권한을 수정하십시오.

따라서 특정 kubeconfig 모드에서 k3s 서버를 시작해야합니다. k3s 서버 옵션 write-kubeconfig-mode (클라이언트 측)를 사용하여이 모드 [$ K3S_KUBECONFIG_MODE]에서 kubeconfig를 작성할 수 있습니다.

환경 변수 K3S_KUBECONFIG_MODE 사용에 대한 설명서를 살펴보고 다음 예제를 보았습니다.

curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE=”644″ sh -s –

chmod 644에 대한 참고 사항 :

Chmod 644 (chmod a + rwx, ux, g-wx, o-wx)는 사용자 (U) / 소유자가 읽고 쓸 수 있지만 실행할 수는 없도록 권한을 설정합니다. 그룹 (G) 및 기타 (O)는 읽을 수 있고 쓰기 및 실행할 수 없습니다.

여기에 사진 설명 삽입

스크립트 디렉토리에서 k3s.sh 파일을 다음과 같이 변경했습니다.

#!/bin/bash
echo "**** Begin installing k3s"

#Install
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.0.1 K3S_KUBECONFIG_MODE="644" sh -
echo "**** End installing k3s"

간결함을 위해이 블로그부터 명령 vagrant up앞에 vagrant destroy명령을 언급 하지 않겠습니다 .

Windows 랩톱의 env라는 하위 디렉터리에서 Windows 명령 프롬프트 (cmd)를 열고 다음을 입력합니다. vagrant up

다음 출력을 생성합니다 (k3에 대한 부분 만 표시됨).

   ubuntu_k3s: **** Begin installing k3s
    ubuntu_k3s: [INFO]  Using v1.0.1 as release
    ubuntu_k3s: [INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.0.1/sha256sum-amd64.txt
    ubuntu_k3s: [INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.0.1/k3s
    ubuntu_k3s: [INFO]  Verifying binary download
    ubuntu_k3s: [INFO]  Installing k3s to /usr/local/bin/k3s
    ubuntu_k3s: [INFO]  Creating /usr/local/bin/kubectl symlink to k3s
    ubuntu_k3s: [INFO]  Creating /usr/local/bin/crictl symlink to k3s
    ubuntu_k3s: [INFO]  Creating /usr/local/bin/ctr symlink to k3s
    ubuntu_k3s: [INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
    ubuntu_k3s: [INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
    ubuntu_k3s: [INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
    ubuntu_k3s: [INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
    ubuntu_k3s: [INFO]  systemd: Enabling k3s unit
    ubuntu_k3s: Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service ? /etc/systemd/system/k3s.service.
    ubuntu_k3s: [INFO]  systemd: Starting k3s
    ubuntu_k3s: **** End installing k3s

따라서 k3s가 설치되면 vagrant ssh를 사용하여 Linux 명령 프롬프트를 열고 다음 명령을 사용합니다.

kubectl get nodes

다음 출력을 생성합니다.

NAME            STATUS   ROLES    AGE   VERSION
ubuntu-bionic   Ready    master   49s   v1.16.3-k3s.2

다음으로 다음 명령을 사용합니다.

kubectl get pods --all-namespaces

다음 출력을 생성합니다.

NAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE
kube-system   local-path-provisioner-58fb86bdfd-g68v5   1/1     Running     0          76s
kube-system   metrics-server-6d684c7b5-4zrgx            1/1     Running     0          75s
kube-system   coredns-d798c9dd-szfg7                    1/1     Running     0          76s
kube-system   helm-install-traefik-xg2zd                0/1     Completed   0          76s
kube-system   svclb-traefik-frjb9                       3/3     Running     0          32s
kube-system   traefik-65bccdc4bd-rxlv4                  1/1     Running     0          32s

다음 명령을 사용하십시오.


cd /etc/rancher/k3s

ls -latr

출력 생성 :


total 12
-rw-r–r– 1 root root 1052 Jan 12 14:40 k3s.yaml
drwxr-xr-x 2 root root 4096 Jan 12 14:40 .
drwxr-xr-x 4 root root 4096 Jan 12 14:40 ..

이제 k3s.yaml의 권한을 변경했습니다.

Kubernetes 웹 UI (대시 보드)

이제 대시 보드를 통해 Kubernetes 클러스터와 상호 작용 해 보겠습니다.

기본적으로 대시 보드 UI는 배포되지 않습니다. 배포하려면 다음 명령을 실행하십시오.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml

kubectl 명령 줄 도구를 사용하여 다음 명령을 실행하여 대시 보드에 액세스 할 수 있습니다.

kubectl proxy

Kubectl은 다음 위치에서 대시 보드를 제공합니다.

http : // localhost : 8001 / api / v1 / namespaces / kube-system / services / https : kubernetes-dashboard : / proxy /

UI는 명령을 실행하는 컴퓨터에서만 액세스 할 수 있습니다. 더 많은 옵션은 kubectl proxy –help를 참조하세요.

데모 환경의 설정으로 인해 단순히 kubectl 프록시를 사용하는 것이 작동하지 않으므로 다시 사용합니다.


kubectl proxy --address='0.0.0.0' </dev/null &>/dev/null &

스크립트 디렉토리에서 다음 내용으로 dashboard.sh 파일을 생성했습니다.

#!/bin/bash

echo "**** Begin preparing dashboard"

echo "**** Install Kubernetes Dashboard"
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
kubectl proxy --address='0.0.0.0' /dev/null &

echo "**** End preparing dashboard"

Vagrantfile의 내용을 다음과 같이 변경했습니다.


Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  
  config.vm.define "ubuntu_k3s" do |ubuntu_k3s|
  
    config.vm.network "forwarded_port",
      guest: 8001,
      host:  8001,
      auto_correct: true
      
    config.vm.provider "virtualbox" do |vb|
        vb.name = "Ubuntu k3s"
        vb.memory = "8192"
        vb.cpus = "1"
        
      args = []
      config.vm.provision "k3s shell script", type: "shell",
          path: "scripts/k3s.sh",
          args: args
        
      args = []
      config.vm.provision "dashboard shell script", type: "shell",
          path: "scripts/dashboard.sh",
          args: args
    end
    
  end

end

Linux 명령 프롬프트에서 다음을 입력하십시오. exit

그런 다음 Windows 명령 프롬프트 (cmd)를 열고 다음을 입력했습니다. vagrant up

다음 출력을 생성합니다 (대시 보드에 대한 부분 만 표시됨).

  ubuntu_k3s: **** Begin preparing dashboard
    ubuntu_k3s: **** Install Kubernetes Dashboard
    ubuntu_k3s: namespace/kubernetes-dashboard created
    ubuntu_k3s: serviceaccount/kubernetes-dashboard created
    ubuntu_k3s: service/kubernetes-dashboard created
    ubuntu_k3s: secret/kubernetes-dashboard-certs created
    ubuntu_k3s: secret/kubernetes-dashboard-csrf created
    ubuntu_k3s: secret/kubernetes-dashboard-key-holder created
    ubuntu_k3s: configmap/kubernetes-dashboard-settings created
    ubuntu_k3s: role.rbac.authorization.k8s.io/kubernetes-dashboard created
    ubuntu_k3s: clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
    ubuntu_k3s: rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
    ubuntu_k3s: clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
    ubuntu_k3s: deployment.apps/kubernetes-dashboard created
    ubuntu_k3s: service/dashboard-metrics-scraper created
    ubuntu_k3s: deployment.apps/dashboard-metrics-scraper created
    ubuntu_k3s: **** End preparing dashboard

Linux 명령 프롬프트에서 다음 명령을 사용했습니다.

kubectl get pods --all-namespaces

다음 출력을 생성합니다.


NAMESPACE              NAME                                         READY   STATUS      RESTARTS   AGE
kube-system            local-path-provisioner-58fb86bdfd-g68v5      1/1     Running     0          13m
kube-system            metrics-server-6d684c7b5-4zrgx               1/1     Running     0          13m
kube-system            coredns-d798c9dd-szfg7                       1/1     Running     0          13m
kube-system            helm-install-traefik-xg2zd                   0/1     Completed   0          13m
kube-system            svclb-traefik-frjb9                          3/3     Running     0          12m
kube-system            traefik-65bccdc4bd-rxlv4                     1/1     Running     0          12m
kubernetes-dashboard   dashboard-metrics-scraper-566cddb686-5wvcx   1/1     Running     0          9m38s
kubernetes-dashboard   kubernetes-dashboard-7b5bf5d559-tn4rh        1/1     Running     0          9m38s

브라우저에 다음 URL을 입력합니다.

http : // localhost : 8001 / api / v1 / namespaces / kubernetes-dashboard / services / https : kubernetes-dashboard : / proxy /

다음 인터페이스가 표시됩니다.

여기에 사진 설명 삽입

따라서 토큰이 필요합니다. ServiceAccount 및 ClusterRoleBinding 매니페스트 파일을 만드는 예제 (대시 보드 관련)를 찾았습니다. 먼저 서비스 사용자를 생성하고 cluster-admin 역할에 대한 역할 바인딩을 완료합니다 (이 역할은 기본적으로 k3s에 존재하지 않음).


apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
---

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

이 예에서는 대시 보드에 로그인 할 수있는 토큰을 얻는 방법에 대한 정보도 제공합니다.


kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

위의 예를 기반으로 다음 콘텐츠로 serviceaccount-k3s.yaml 파일을 yaml 디렉터리에 추가했습니다.


apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

yaml 디렉터리의 clusterrolebinding-k3s.yaml 파일에 다음을 추가했습니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

결과적으로 kubectl -n kube-system get secret 명령에는 긴 키 정보 목록이 포함됩니다. 따라서 대시 보드에 로그인 할 수있는 토큰을 쉽게 결정할 수 있도록 다른 네임 스페이스를 사용하고 싶습니다. Kubernetes 대시 보드를 설치할 때 네임 스페이스가 생성 되었기 때문에 kubernetes-dashboard 네임 스페이스를 사용하기로 선택했습니다. 위의 출력을 참조하십시오.

스크립트 디렉토리에서 dashboard.sh 파일을 다음과 같이 변경했습니다.

#!/bin/bash

echo "**** Begin preparing dashboard"

echo "**** Install Kubernetes Dashboard"
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml

#Create Helm chart
echo "**** Create Helm chart"
cd /vagrant
cd helmcharts
rm -rf /vagrant/helmcharts/k3s-chart/*
helm create k3s-chart

rm -rf /vagrant/helmcharts/k3s-chart/templates/*
cp /vagrant/yaml/*k3s.yaml /vagrant/helmcharts/k3s-chart/templates

# Install Helm chart
cd /vagrant
cd helmcharts
echo "**** Install Helm chart k3s-chart"
helm install k3s-release ./k3s-chart

# Wait 30 seconds
echo "**** Waiting 30 seconds ..."
sleep 30

#List helm releases
echo "**** List helm releases"
helm list -d

#List secrets
echo "**** List secrets with namespace kubernetes-dashboard"
kubectl get secrets --namespace kubernetes-dashboard

echo "**** Describe secret with namespace kubernetes-dashboard"
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

kubectl proxy --address='0.0.0.0' /dev/null &

echo "**** End preparing dashboard"

Helm 버전 3.0.2를 사용하고 있기 때문에 몇 가지 변경이 필요합니다. 다음 명령을 사용하여 변경된 버전을 확인합니다.


helm version

출력 생성 :

version.BuildInfo{Version:”v3.0.2″, GitCommit:”19e47ee3283ae98139d98460de796c1be1e3975f”, GitTreeState:”clean”, GoVersion:”go1.13.5″}

helm install ./k3s-chart –name k3s-release를 사용하면 다음과 같은 결과가 나타납니다.

Error: unknown flag: –name

따라서 다음과 같이 변경했습니다. helm install k3s-release ./k3s-chart

Helm을 사용하고 싶기 때문에 Vagrantfile의 내용을 다음과 같이 변경했습니다.


Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  
  config.vm.define "ubuntu_k3s" do |ubuntu_k3s|
  
    config.vm.network "forwarded_port",
      guest: 8001,
      host:  8001,
      auto_correct: true
      
    config.vm.provider "virtualbox" do |vb|
        vb.name = "Ubuntu k3s"
        vb.memory = "8192"
        vb.cpus = "1"
        
      args = []
      config.vm.provision "k3s shell script", type: "shell",
          path: "scripts/k3s.sh",
          args: args
        
      args = []
      config.vm.provision "helm shell script", type: "shell",
          path: "scripts/helm.sh",
          args: args
        
      args = []
      config.vm.provision "dashboard shell script", type: "shell",
          path: "scripts/dashboard.sh",
          args: args
    end
    
  end

end

Windows 명령 프롬프트 (cmd)를 다시 열고 다음을 입력했습니다. vagrant up

다음 출력을 생성합니다 (대시 보드에 대한 부분 만 표시됨).

   ubuntu_k3s: **** Begin preparing dashboard
    ubuntu_k3s: **** Install Kubernetes Dashboard
    ubuntu_k3s: namespace/kubernetes-dashboard created
    ubuntu_k3s: serviceaccount/kubernetes-dashboard created
    ubuntu_k3s: service/kubernetes-dashboard created
    ubuntu_k3s: secret/kubernetes-dashboard-certs created
    ubuntu_k3s: secret/kubernetes-dashboard-csrf created
    ubuntu_k3s: secret/kubernetes-dashboard-key-holder created
    ubuntu_k3s: configmap/kubernetes-dashboard-settings created
    ubuntu_k3s: role.rbac.authorization.k8s.io/kubernetes-dashboard created
    ubuntu_k3s: clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
    ubuntu_k3s: rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
    ubuntu_k3s: clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
    ubuntu_k3s: deployment.apps/kubernetes-dashboard created
    ubuntu_k3s: service/dashboard-metrics-scraper created
    ubuntu_k3s: deployment.apps/dashboard-metrics-scraper created
    ubuntu_k3s: **** Create Helm chart
    ubuntu_k3s: Creating k3s-chart
    ubuntu_k3s: **** Install Helm chart k3s-chart
    ubuntu_k3s: NAME: k3s-release
    ubuntu_k3s: LAST DEPLOYED: Tue Jan 14 19:53:24 2020
    ubuntu_k3s: NAMESPACE: default
    ubuntu_k3s: STATUS: deployed
    ubuntu_k3s: REVISION: 1
    ubuntu_k3s: TEST SUITE: None
    ubuntu_k3s: **** Waiting 30 seconds …
    ubuntu_k3s: **** List helm releases
    ubuntu_k3s: NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
    ubuntu_k3s: k3s-release     default         1               2020-01-14 19:53:24.329429114 +0000 UTC deployed        k3s-chart-0.1.0 1.16.0
    ubuntu_k3s: **** List secrets with namespace kubernetes-dashboard
    ubuntu_k3s: NAME
    ubuntu_k3s:
    ubuntu_k3s:
    ubuntu_k3s:
    ubuntu_k3s:
    ubuntu_k3s: TYPE
    ubuntu_k3s:
    ubuntu_k3s:
    ubuntu_k3s:
    ubuntu_k3s:
    ubuntu_k3s:   DATA   AGE
    ubuntu_k3s: default-token-l2nr4                kubernetes.io/service-account-token   3      34s
    ubuntu_k3s: kubernetes-dashboard-token-54p9k   kubernetes.io/service-account-token   3      34s
    ubuntu_k3s: kubernetes-dashboard-certs         Opaque                                0      34s
    ubuntu_k3s: admin-user-token-trfdn             kubernetes.io/service-account-token   3      31s
    ubuntu_k3s: kubernetes-dashboard-csrf          Opaque                                1      34s
    ubuntu_k3s: kubernetes-dashboard-key-holder    Opaque                                2      34s
    ubuntu_k3s: **** Describe secret with namespace kubernetes-dashboard
    ubuntu_k3s: Name:         admin-user-token-trfdn
    ubuntu_k3s: Namespace:    kubernetes-dashboard
    ubuntu_k3s: Labels:       
    ubuntu_k3s: Annotations:  kubernetes.io/service-account.name: admin-user
    ubuntu_k3s:               kubernetes.io/service-account.uid: b65dc46c-0833-4fcf-b833-cfec45139764
    ubuntu_k3s:
    ubuntu_k3s: Type:  kubernetes.io/service-account-token
    ubuntu_k3s:
    ubuntu_k3s: Data
    ubuntu_k3s: ====
    ubuntu_k3s: token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IlhyREtIa21HdlhBQVd2Nm9kTGtJU3RUTnlWWTNJaHI2blNPb3J5eWRwR2cifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXRyZmRuIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiNjVkYzQ2Yy0wODMzLTRmY2YtYjgzMy1jZmVjNDUxMzk3NjQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.bJBCZmV7oIUuljz9-I1oO71js-mAOZHc4wLaUwPayYAqAzx_kTM_oFwSEBtieFxmwYP2CTP2QJZM6G8OBGvLyUiQyRumaTavFo51Rh-eW9wSXO24p6Sf7BdQRaJsjS4lnInDGd1Ksrv-Az6LI10rrIJXHgI7jz1wNmSdSqk3OHGXgioKZL0qjlrwgS6UviTe-0geMFxvdGUogUWvShmQkR-sGRSfACYX8-RZdFSc3wRWsoIVo_4NME-q8uNm79BaP5RbPAC-z-2amVHJQUUtgs_88pY-Qu-iiDqUpC823pHYkjB65w5RICjjqlKIrWqAptT35fBFSOfrUKf_Oy483A
    ubuntu_k3s: ca.crt:     526 bytes
    ubuntu_k3s: namespace:  20 bytes
    ubuntu_k3s: **** End preparing dashboard

랩톱의 브라우저에서 토큰 값을 입력하고 (위에 표시된대로) "로그인"버튼을 클릭했습니다.

여기에 사진 설명 삽입

Kubernetes 대시 보드를 열고 기본 네임 스페이스를 선택하십시오.

여기에 사진 설명 삽입

다음으로 "노드"를 클릭합니다. 여기에서 Kubernetes 클러스터가 하나의 노드로 구성되어 있음을 알 수 있습니다.

여기에 사진 설명 삽입

마지막으로 네임 스페이스를 kube-system으로 변경하고 Pod로 이동 한 결과 결과는 다음과 같습니다.

여기에 사진 설명 삽입

이제이 기사의 작업이 완료되었습니다! 이 기사에서는 Vagrant 및 셸 스크립트를 사용하여 Oracle VirtualBox 장치의 Ubuntu Guest OS에서 k3s, Helm 및 Kubernetes Dashboard를 포함한 데모 환경을 처음부터 자동으로 설정하는 방법을 설명합니다. K3s는 실제로 설치가 비교적 쉽습니다. 다음 단계에서 실제로 사용을 시작할 수 있습니다.

추천

출처blog.csdn.net/qq_42206813/article/details/105136603