multipass指定virualbox搭建k8s叢集(選擇docker作為預設容器)

雪山飛豬發表於2021-09-06

前言

上篇文章安裝的k3s預設使用的是containerd作為容器,並且是用的輕量級的虛擬化方式。
下面安裝一個docker版本的,並結合virualbox,更愉快地玩耍。

踩了兩個大坑

  • multipass得指定網路卡,要不master和worker不能互通
  • k3s得指定node ip,要不k3s-agent不能通過https方式join到叢集

參考文章https://github.com/k3s-io/k3s/issues/1523

步驟

初始化三臺虛擬機器

sudo multipass set local.driver=virtualbox
multipass launch --name master --network en7 --mem 1G --disk 3G 18.04
multipass launch --name worker1 --network en7 --mem 1G --disk 3G 18.04
multipass launch --name worker2 --network en7 --mem 1G --disk 3G 18.04

這裡的en7是我通過ifconfig找到的192地址的網路卡

image
我們開啟virualbox可以檢視到這幾臺機器

 sudo VirtualBox

image

統一安裝docker

使用multipass shell進入虛擬機器安裝

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

修改docker映象源

# vim /etc/docker/daemon.json
{
  "registry-mirrors": [
    "http://hub-mirror.c.163.com"
  ]
}
# 重啟
systemctl restart docker.service

檢視masterIP

multipass ls

image

這裡我的master的ip是192.168.44.32

安裝master節點(重點設定)

通過 multipass shell master進入master,執行

export K3S_NODE_NAME=master
export K3S_EXTERNAL_IP=192.168.44.32
export INSTALL_K3S_EXEC="--docker --node-ip=$K3S_EXTERNAL_IP --node-external-ip=$K3S_EXTERNAL_IP"
export INSTALL_K3S_MIRROR=cn
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | sh -

安裝完成如下

檢視master的token

cat /var/lib/rancher/k3s/server/node-token

這裡我的token是

K1016f9485d04e840ff56fd8d6ca2af3f9a0403795f8c97602396ea3c73d7ff363f::server:8594ea32dca695d9f14b6df06e10f71e

這個token是用來後續安裝worker節點用的

安裝worker節點

通過multipass shell worker1進入worker1執行

export K3S_URL="https://192.168.44.32:6443"
export K3S_TOKEN="K1016f9485d04e840ff56fd8d6ca2af3f9a0403795f8c97602396ea3c73d7ff363f::server:8594ea32dca695d9f14b6df06e10f71e"
export K3S_NODE_NAME=worker1
export INSTALL_K3S_MIRROR=cn
export INSTALL_K3S_EXEC="--docker"
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | sh -

安裝完成如下
image
我們可以用

systemctl status k3s-agent

檢視下agent是否啟動正常
image

我們再用同樣的方式安裝worker2,進入worker2執行

export K3S_URL="https://192.168.44.32:6443"
export K3S_TOKEN="K1016f9485d04e840ff56fd8d6ca2af3f9a0403795f8c97602396ea3c73d7ff363f::server:8594ea32dca695d9f14b6df06e10f71e"
export K3S_NODE_NAME=worker2
export INSTALL_K3S_MIRROR=cn
export INSTALL_K3S_EXEC="--docker"
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | sh -

安裝完成後,我們在master看下叢集資訊

kubectl get node -o wide

image

這就代表安裝完成了

測試

這裡我建立了一個自己的資料夾存放yaml

mkdir chenqionghe
cd chenqionghe

部署一個nginx的deployment

我們來建立一個nginx的deployment

  • nginxdemo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginxdemo
spec:
  replicas: 1
  selector:
    matchLabels:
      name: nginxdemo
  template:
    metadata:
      labels:
        name: nginxdemo
    spec:
      containers:
      - name: nginxdemo
        image: nginx
        ports:
        - containerPort: 80

執行一下

kubectl apply -f nginxdemo.yaml

image

這裡看到已經正常啟動了

部署一個service

  • nginxsvc.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginxsvc
spec:
  type: NodePort
  ports:
  - port: 82
    protocol: TCP
    targetPort: 80
    name: http
    nodePort: 30055
  selector:
    name: nginxdemo

這裡用的是NodePort的方式來訪問,我們建立一下

kubectl apply -f nginxsvc.yaml

我們kubectl get svc用檢視一下svc
可以看到svc已經部署成功

訪問一下
image
image

這種方法安裝的好處,就是我們可以使用docker,而不需要再去了解containerd,下面是直接在worker1機器用docker ps檢視的結果
image

就是這麼簡單,你學會了嘛~

相關文章