前言

上篇文章安裝的k3s預設使用的是containerd作為容器,並且是用的輕量級的虛擬化方式。

預設的k3s用的是containerd,下面安裝一個docker版本的,並結合virualbox,更愉快地玩耍。

踩了兩個大坑

  • multipass得指定網絡卡,要不master和worker不能互通
  • k3s得指定ip解決agent安裝問題,要不會報https不能通過錯誤

參考文章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地址的網絡卡



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

 sudo VirtualBox

統一安裝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

這裡我的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 -

安裝完成如下



我們可以用

systemctl status k3s-agent

檢視下agent是否啟動正常

我們再用同樣的方式安裝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

這就代表安裝完成了

測試

這裡我建立了一個自己的資料夾存放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

這裡看到已經正常啟動了

部署一個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已經部署成功

訪問一下



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

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