1. 程式人生 > 其它 >k3s安裝與部署

k3s安裝與部署

k3s安裝與部署

一、k3s介紹

1.1、什麼是k3s

中文網站:http://docs.rancher.cn/docs/k3s/quick-start/_index/

k3s是經過CNCF認證的由Rancher公司開發維護的一個輕量級的 Kubernetes 發行版,核心機制還是和 k8s 一樣,但是剔除了很多外部依賴以及 K8s 的 alpha、beta 特性,同時改變了部署方式和執行方式,目的是輕量化 K8s,簡單來說,K3s 就是閹割版 K8s,消耗資源極少。它主要用於邊緣計算、物聯網等場景。K3s 具有以下特點:

1)安裝簡單,佔用資源少,只需要512M記憶體就可以執行起來;
2)apiserver 、schedule 等元件全部簡化,並以程序的形式執行在節點上,把程式都打包為單個二進位制檔案,每個程式只需要佔用100M記憶體;
3)使用基於sqlite3

的輕量級儲存後端作為預設儲存機制。同時支援使用etcd3、MySQL 和PostgreSQL作為儲存機制;
4)預設使用 local-path-provisioner 提供本地儲存卷;
5)預設安裝了Helm controllerTraefik Ingress controller
6)所有 Kubernetes control-plane 元件的操作都封裝在單個二進位制檔案和程序中,使 K3s 具有自動化和管理包括證書分發在內的複雜叢集操作的能力。
7)減少外部依賴,作業系統只需要安裝較新的核心(centos7.6就可以,不需要升級核心)以及支援cgroup即可,k3s安裝包已經包含了containerd、Flannel、CoreDNS,非常方便地一鍵式安裝,不需要額外安裝Docker、Flannel等元件。

1.2、邊緣計算

1.3、k3s架構

1.3.1、單節點的k3s架構

1)k3s server節點是執行k3s server命令的機器(裸機或者虛擬機器),而k3s Agent 節點是執行k3s agent命令的機器。

2)單點架構只有一個控制節點(在 K3s 裡叫做server node,相當於 K8s 的 master node),而且K3s的資料儲存使用 sqlite 並內建在了控制節點上

3)在這種配置中,每個 agent 節點都註冊到同一個 server 節點。K3s 使用者可以通過呼叫server節點上的K3s API來操作Kubernetes資源。

1.3.2、高可用的K3S架構

雖然單節點 k3s 叢集可以滿足各種用例,但對於 Kubernetes control-plane 的正常執行至關重要的環境,可以在高可用配置中執行 K3s。一個高可用 K3s 叢集由以下幾個部分組成:

1)K3s Server 節點:兩個或者更多的server節點將為 Kubernetes API 提供服務並執行其他 control-plane 服務

2)外部資料庫:外部資料儲存(與單節點 k3s 設定中使用的嵌入式 SQLite 資料儲存相反)

二、k3s部署

2.1、環境規劃

叢集角色 ip地址 安裝的元件 配置
server節點 192.168.40.180 k3s server 2C2G
agent節點 192.168.40.181 k3s agent 2C2G

2.2、安裝步驟

1)系統初始化

1、配置yum源
2、關掉防火牆
3、關掉selinux
4、修改核心引數
5、關掉swap交換分割槽

2)安裝containerd

yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install containerd -y
systemctl start containerd && systemctl enable containerd

3)安裝k3s

# 在k3s server上執行
curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

4)驗證安裝是否成功

[root@k3s-server ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k3s-server   Ready    control-plane,master   13m   v1.21.2+k3s1
[root@k3s-server ~]# kubectl get pods -n kube-system
NAME                                      READY   STATUS      RESTARTS   AGE
metrics-server-86cbb8457f-bpt5v           1/1     Running     0          13m
coredns-7448499f4d-fsvsd                  1/1     Running     0          13m
local-path-provisioner-5ff76fc89d-xqlq9   1/1     Running     0          13m
helm-install-traefik-crd-k5dcn            0/1     Completed   0          13m
helm-install-traefik-lg4cs                0/1     Completed   0          13m
svclb-traefik-nnlmh                       2/2     Running     0          7m59s
traefik-97b44b794-qlkwx                   1/1     Running     0          8m
[root@k3s-server ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.43.0.1    <none>        443/TCP   14m

5)k3s叢集新增work節點

# 提取join token
[root@k3s-server ~]# cat /var/lib/rancher/k3s/server/node-token
K10ea021e6e6ca43973ceeb1ec005ffe5bc4d4e1b5993914081cdc9480826dbaac1::server:ec6135f63a1e4f4447ea8fe42c6508b1

# 在agent上執行
[root@k3s-agent ~]# curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://192.168.40.180:6443 K3S_TOKEN=K10ea021e6e6ca43973ceeb1ec005ffe5bc4d4e1b5993914081cdc9480826dbaac1::server:ec6135f63a1e4f4447ea8fe42c6508b1 sh -
# 檢視
[root@k3s-server ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k3s-server   Ready    control-plane,master   21m   v1.21.2+k3s1
k3s-agent    Ready    <none>                 68s   v1.21.2+k3s1

三、k3s部署應用- Guestbook 留言板

1)安裝redis-master

[root@k3s-server ~]# cat redis-master-deployment.yaml 
apiVersion: apps/v1 
kind: Deployment
metadata:
  name: redis-master
  labels:
    app: redis
spec:
  selector:
    matchLabels:
      app: redis
      role: master
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: redis
        role: master
        tier: backend
    spec:
      containers:
      - name: master
        image: kubeguide/redis-master
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 6379
        
[root@k3s-server ~]# cat redis-master-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: redis-master
  labels:
    app: redis
    role: master
    tier: backend
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis
    role: master
    tier: backend
    
# 更新
[root@k3s-server ~]# kubectl apply -f redis-master-deployment.yaml 
[root@k3s-server ~]# kubectl apply -f redis-master-service.yaml

注意:如果已經有離線映象包,可用如下方法匯入

[root@k3s-agent ~]# ctr images import frontend.tar.gz
[root@k3s-agent ~]# ctr images import redis-master.tar.gz
[root@k3s-agent ~]# ctr images import redis-slave.tar.gz

2)安裝redis-slave

[root@k3s-server ~]# cat redis-slave-deployment.yaml 
apiVersion: apps/v1 
kind: Deployment
metadata:
  name: redis-slave
  labels:
    app: redis
spec:
  selector:
    matchLabels:
      app: redis
      role: slave
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: redis
        role: slave
        tier: backend
    spec:
      containers:
      - name: slave
        image: kubeguide/guestbook-redis-slave
        imagePullPolicy: IfNotPresent
        env:
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - containerPort: 6379

[root@k3s-server ~]# cat redis-slave-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: redis-slave
  labels:
    app: redis
    role: slave
    tier: backend
spec:
  ports:
  - port: 6379
  selector:
    app: redis
    role: slave
    tier: backend
    
[root@k3s-server ~]# kubectl apply -f redis-slave-deployment.yaml 
[root@k3s-server ~]# kubectl apply -f redis-slave-service.yaml
[root@k3s-server ~]# kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
redis-master-7f9c7745cf-qb8jd   1/1     Running   0          9m9s
redis-slave-66c6dd7c96-v7d48    1/1     Running   0          114s

3)建立frontend

[root@k3s-server ~]# cat frontend-deployment.yaml 
apiVersion: apps/v1 
kind: Deployment
metadata:
  name: frontend
  labels:
    app: guestbook
spec:
  selector:
    matchLabels:
      app: guestbook
      tier: frontend
  replicas: 1
  template:
    metadata:
      labels:
        app: guestbook
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: kubeguide/guestbook-php-frontend
        imagePullPolicy: IfNotPresent
        env:
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - containerPort: 80

[root@k3s-server ~]# cat frontend-service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  type: NodePort 
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30001
  selector:
    app: guestbook
    tier: frontend
    
[root@k3s-server ~]# kubectl apply -f frontend-deployment.yaml 
[root@k3s-server ~]# kubectl apply -f frontend-service.yaml
[root@k3s-server ~]# kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
redis-master-7f9c7745cf-qb8jd   1/1     Running   0          16m
redis-slave-66c6dd7c96-v7d48    1/1     Running   0          9m37s
frontend-cc6c958c7-jddl6        1/1     Running   0          2m56s
[root@k3s-server ~]# kubectl get svc
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP   10.43.0.1       <none>        443/TCP        42m
redis-master   ClusterIP   10.43.41.230    <none>        6379/TCP       17m
redis-slave    ClusterIP   10.43.220.9     <none>        6379/TCP       9m50s
frontend       NodePort    10.43.147.104   <none>        80:30001/TCP   6m23s

四、k3s解除安裝

# 在server節點執行如下:
[root@k3s-server ~]# /usr/local/bin/k3s-uninstall.sh

# 在agent節點執行如下:
[root@k3s-agent ~]# /usr/local/bin/k3s-agent-uninstall.sh
作者:Lawrence 出處:http://www.cnblogs.com/hujinzhong/

-------------------------------------------

個性簽名:獨學而無友,則孤陋而寡聞。做一個靈魂有趣的人!

掃描上面二維碼關注我 如果你真心覺得文章寫得不錯,而且對你有所幫助,那就不妨幫忙“推薦"一下,您的“推薦”和”打賞“將是我最大的寫作動力! 本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線.