1. 程式人生 > 程式設計 >js實現七夕表白彈幕效果 jQuery實現彈幕技術

js實現七夕表白彈幕效果 jQuery實現彈幕技術

1. k3s介紹

1.1 什麼是k3s?

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 controller 和 Traefik Ingress controller;

6、所有 Kubernetes control-plane 元件的操作都封裝在單個二進位制檔案和程序中,使 K3s 具有自動化和管理包括證書分發在內的複雜叢集操作的能力。

7減少外部依賴,作業系統只需要安裝較新的核心(centos7.6就可以,不需要升級核心)以及支援cgroup即可,k3s安裝包已經包含了containerd、Flannel、CoreDNS,非常方便地一鍵式安裝,不需要額外安裝Docker、Flannel等元件。

1.1.1 CNCF介紹

CNCF,英文全稱為Cloud Native Computing Foundation,中文譯為“雲原生計算基金會”。成立於2015年12月11日。

CNCF是Linux基金會旗下的基金會,可以理解為一個非盈利組織。

當年谷歌內部一直用於編排容器的Borg專案開源了,為了該專案更好的發展,谷歌與Linux基金會一起創辦了CNCF。同時,谷歌把Borg用Go語言重寫,更名為Kubernetes並捐贈到CNCF。

成立這個組織的初衷:

1、推動雲原生計算可持續發展;

2、幫助雲原生技術開發人員快速地構建出色的產品。

CNCF託管的專案:

–kubernetes: 容器編排系統,可以跨主機管理容器化應用;

–Prometheus:開源的監控系統,專注於時間序列資料,主要用於對k8s和容器進行監控;

–CoreDNS:k8s中的DNS伺服器;

– containerd:將容器執行時及其管理功能從 Docker Daemon 剝離的映象管理和容器執行技術;

–Fluentd:日誌收集元件;

– Linkerd:為微服務提供可靠性支援、自動化負載均衡、服務發現和執行時可恢復性的開源“服務網格”專案;

– gRPC:現代化高效能開源遠端呼叫框架;

– rkt:幫助開發者打包應用和依賴包,簡化搭環境等部署工作,提高容器安全性和易用性的容器引擎。

1.1.2 什麼是發行版?

我們經常聽說linux發行版,那什麼是linux發行版?

Linux發行版與Windows或Mac OS(作業系統)一樣,Linux由多種型別組成,稱為分發,每個發行版都很相似,但是不完全一樣。一般情況下,Linux發行版是各種應用程式(軟體)的集合,從而來適應使用目的,除了在伺服器上安裝之外,其他還要提前設定,以便可以立即進行實際使用。

Linux發行版主要有Debian型別、Slackware系列、Red Hat

1.Debian型別:
Debian型別是高度發達的,但是Debian門檻比較高,對使用者比較友好的,Debian擁有出色的效能,可用於嵌入式裝置等眾多應用。此外,它已經發展成為一種流行的Linux發行版,名為Ubuntu。
2.Slackware系列:
Slackware管理方法比其他線路更復雜,對於初學者來說相對困難,這是因為項強調穩定性和安全性的發展政策,並且沒有優先考慮易用性。經過驗證後是否有透露軟體的立場,Slackware著名的發行版包括openSUSE,Plamo Linux和Puppy Linux。
3.Red Hat:
目前Red Hat大致分為兩類,第一個是紅帽企業Linux(RHEL),有些服務是要收費的。另一種是名為Fedora(Fedora)的免費發行版。

4、Centos

CentOS是Linux發行版之一,它是來自於Red Hat Enterprise Linux依照開放原始碼規定釋出的原始碼所編譯而成。由於出自同樣的原始碼,因此有些要求高度穩定性的伺服器以CentOS替代商業版的Red Hat Enterprise Linux使用。

1.1.3 邊緣計算介紹

邊緣計算也稱為邊緣處理,是一種將伺服器放置在本地裝置附近的網路技術,解決資料傳輸的延遲問題。這樣的處理方式是在感測器附近或者裝置產生資料的位置進行的,因此稱之為邊緣。邊緣”特指計算資源在地理分佈上更加靠近裝置,而遠離雲資料中心的資源節點。

典型的邊緣計算分為物聯網(例如:智慧城市,智慧家居,大型商店等)和非物聯網(例如:遊戲,CDN 等)場景。

舉個例子:原來咱們取錢存錢,必須去銀行排隊,那現在我們在住的附近有自動取款機,可以直接取錢,減少了排隊等待時間,還能就近解決,更加安全

邊緣計算應用場景:

在城市路面檢測中,在道路兩側路燈上安裝感測器收集城市路面資訊,檢測空氣質量+、光照強度、噪音水平等環境資料,當路燈發生故障時能夠及時反饋至維護人員。

在智慧交通中,邊緣伺服器上通過執行智慧交通控制系統來實時獲取和分析資料,根據實時路況來控制交通訊息燈,以減輕路面車輛擁堵等。

在無人駕駛中,如果將感測器資料上傳到雲端計算中心將會增加實時處理難度,並且受到網路制約,因此無人駕駛主要依賴車內計算單元來識別交通訊號和障礙物,並且規劃路徑

1.1.4 邊緣計算應用場景

《福布斯》技術委員會的12位成員研究了一些企業的用例,在這些用例中,都使用了邊緣計算:

應用一:改進醫療裝置效能和資料管理

在醫療場景下,邊緣計算主要幫助醫療保健體系的IT基礎架構,具體來說,是防止醫療裝置管理的應用程式發生延遲。在邊緣計算的支援下,無需構建集中的資料中心,可對關鍵資料進行本地化,在安全性、響應速度和有效性上有更佳表現。

應用二:本地零售的實時資料分析

邊緣計算的主要目的,是讓運算儘可能接近資料來源。在零售場景中,以往企業都是將各分支的資料彙總到中心位置進行分析,再進行決策和行動。而通過邊緣計算,零售店鋪可以在本地就進行資料處理和優化,這樣組織的行動反饋就能更快更及時。

應用三:消費者資料隱私
處理高度敏感的消費者資料的公司發現,由於資料洩漏成本高昂,雲端計算很危險。因此,許多這類公司正在將邊緣計算用於處理消費者資料,因為它為他們提供了更多的安全和控制選擇。這可能會使企業工作流程複雜化,但它可以帶來好處,特別是在醫療資料公司中。- Sean Byrnes, Outlier
應用四:物聯網
物聯網是企業為獲得更好的資料、客戶體驗、現場營銷和更智慧的流程而實施的智慧的重大轉變。邊緣計算使網路的執行水平能夠為物聯網提供高效能。接近實時的速度意味著使用者體驗可以非常出色,並且可以為企業帶來更好、更有效的運營。-Frank Cittadino, QOS Networks
應用五:視訊監控和分析
視訊監控已經部署在邊緣,以及視訊分析。視訊產生的資料是所有其他來源資料總和的10倍。這是一個很好的例子,說明您需要在資料中心之外開始處理的資料型別,以最大限度地減少通過網路移動和儲存的資料量。此外,它還允許企業對可操作的資料做出實時決策- Bill Galloway,Pivot3 Inc.

應用六:工業操作
工廠車間處理等工業操作需要海量資料的快速響應。這些資料中的大部分被丟棄,但能夠通過檢測邊緣資料中的異常來使工廠操作員能夠及時對工廠車間的問題做出反應。這樣可以間接減少停機從而提高生產率。- Randal Kenworthy,Cognizant
應用七:智慧建築
隨著我們的會議室和設施變得越來越智慧化,將會有一種把所有東西都放到雲端的誘惑。考慮到安全性和穩定性,在站點上託管資料將會有一些好處。我們已經看到了基於雲的照明在網路中斷時可能會令人沮喪的問題,而工作場所的可靠性甚至更重要。 Luke Wallace, Bottle Rocket
應用八:無人駕駛汽車
汽車行業已投入數十億資金開發邊緣計算技術。為了安全執行,這些車輛需要收集和分析有關其周圍環境,方向和天氣狀況的大量資料,以及與道路上的其他車輛進行通訊。- Arnie Gordon,Arlyn Scales
應用九:機頂盒
Edge AI可以在機頂盒裝置上執行一個低佔用空間的智慧引擎,可以實時分析資料,對AI進行編碼,在本地解決問題並向上遊伺服器提供智慧反饋。與基本自動化(邊緣機器人流程自動化機器人)相結合,AI引擎可以自我修復並在本地解決許多問題。- Ankur Garg,Hotify Inc.

1.2 為什麼叫做k3s?

我們希望安裝的 Kubernetes 在記憶體佔用方面只是原來一半的大小。Kubernetes 是一個 10 個字母的單詞,簡寫為k8s,所以, Kubernetes 一半大的東西就是有 5 個字母的單詞,簡寫為 K3S。K3S沒有全稱,也沒有官方的發音。

K3s 適用於以下場景:

1、邊緣計算-Edge

2、物聯網-IoT

3、CI:持續整合

4、Development:開發

5、ARM

6、嵌入 K8s

由於執行 K3s 所需的資源相對較少,所以 K3s 也適用於開發和測試場景。在這些場景中,如果開發或測試人員需要對某些功能進行驗證,或對某些問題進行重現,那麼使用 K3s 不僅能夠縮短啟動叢集的時間,還能夠減少叢集需要消耗的資源。與此同時,Rancher 中國團隊推出了一款針對 K3s 的效率提升工具:AutoK3s。只需要輸入一行命令,即可快速建立 K3s 叢集並新增指定數量的 master 節點和 worker 節點。

問題1:什麼是ARM

ARM64和ARMv7都支援二進位制檔案和多源映象。k3s在小到樹莓派或大到 AWS a1.4xlarge 32GiB伺服器的環境中均能出色工作。

1.3 k3s架構

1.3.1單節點的k3s架構

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

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

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

1.3.2高可用的K3S架構

K3S高可用架構

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

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

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

1.3.4 邊緣計算應用案例分析

背景:

在進行資訊化、智慧化改造的過程中,首先第一步,就是要獲取底層系統的全方位的資料。因此需要部署大量的邊緣裝置來採集資料、分析資料,通過這些資料進行建模,大量的邊緣裝置一般離散的分佈在不同機房、廠區、甚至是不同的地理區域。

需 求:

運維角度來講:

1、管理這些邊緣裝置,保持邊緣裝置上執行的服務的高可用性;

2、快速的上線、升級;

3、配置的快速更改與應用

以上案例來自曾永傑,上海全應科技有限公司運維經理,曾在華為西安研究所云計算部門承擔軟體測試工程師、專案交付、線上運維等工作職責,當前工作主要為CI/CD流程的建設與維護、應用的容器化改革和容器雲平臺的運維管理

2. k3s和k8s如何選擇

K8s和k3s各有優劣。若是你要進行大型的叢集部署,建議你選擇使用K8s;若是你處於邊緣計算等小型部署的場景或僅僅須要部署一些非核心叢集進行開發/測試,那麼選擇k3s則是價效比更高的選擇。

雲端計算場景用k8s

邊緣計算場景用k3s

Q:k3s和k8s具體有多大的差別?
A
:在實際的應用部署中,幾乎沒有任何差異,至少到目前為止,我所遇到的場景,k8s能滿足的,k3s也能滿足,相信,通過不斷的迭代,k3s在未來會更完善邊緣場景。

Q:能直接學習k3s嗎?

A: k3s的所有操作跟k8s無區別,但是學習還是以k8s為主,之後再擴充套件k3s

3.安裝k3s

安裝k3s服務的作業系統要求:

Linux 的核心版本在3.10以上

每臺伺服器上至少要有512MB的記憶體空間

硬碟中可用的儲存空間必須大於500 MB

配置yum源
關掉防火牆
關掉selinux
修改核心引數
關掉swap交換分割槽
 [root@localhost ~]# yum install containerd -y
啟動containerd    
[root@localhost ~]# systemctl start containerd

國內使用者可以用如下方法:安裝速度會更快
#執行如下命令安裝:

curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
看到如下,說明k3s已經啟動了:

驗證安裝是否成功

k3s kubectl get nodes

顯示如下,說明安裝成功:

NAME             STATUS   ROLES                  AGE   VERSION
192.168.40.180   Ready    control-plane,master   17s   v1.20.6+k3s1
    
k3s kubectl get pods -n kube-system
顯示如下:
NAME                                      READY   STATUS      RESTARTS   AGE
coredns-854c77959c-k74k6                  1/1     Running     0             2m
local-path-provisioner-5ff76fc89d-7q7pk      1/1     Running     0            2m
metrics-server-86cbb8457f-s8pl9             1/1     Running     0            2m
helm-install-traefik-26brw                    0/1     Completed   0            2m
svclb-traefik-6flmb                           2/2     Running     0            57s
traefik-6f9cbd9bd4-95jcb                     1/1     Running     0            57s

部署完成之後,上面所有的程序都由 k3s 這個 service 來建立管理。可以使用 systemctl status k3s 檢視。

3.1 在k3s叢集新增work節點

提取join token

我們想要新增一對worker節點。在這些節點上安裝K3s,我們需要一個join token。Join token存在於master節點的檔案系統上。讓我們複製並將它儲存在某個地方,稍後我們可以獲取它:

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

獲取到一串token:
K1048a0844cf602b7c96a4ea98a0a3531298e78262ba19875bd31a92ffc56686f63::server:698e6bc453d5871cbb1a4741387824b0
把work節點加入k3s:
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=K1048a0844cf602b7c96a4ea98a0a3531298e78262ba19875bd31a92ffc56686f63::server:698e6bc453d5871cbb1a4741387824b0  sh -

驗證work節點是否加入叢集:
在192.168.40.180操作:
k3s kubectl get nodes

顯示如下,說明工作節點成功加入k3s叢集:
NAME             STATUS   ROLES                  AGE     VERSION
192.168.40.181   Ready    <none>                 57s     v1.20.6+k3s1
192.168.40.180   Ready    control-plane,master    5m36s   v1.20.6+k3s1

4.在k3s中部署應用- Guestbook 留言板

在做下面實驗之前需要先把離線映象包上傳到安裝k3s的server和agent節點:

通過ctr解壓映象:

ctr images import frontend.tar.gz
ctr images import redis-master.tar.gz
ctr images import redis-slave.tar.gz
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
kubectl apply -f redis-master-deployment.yaml
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

kubectl apply -f redis-master-service.yaml
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
        env:
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - containerPort: 6379

kubectl apply -f redis-slave-deployment.yaml
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

kubectl apply -f redis-slave-service.yaml
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
        env:
        - name: GET_HOSTS_FROM
          value: dns
        ports:
        - containerPort: 80

kubectl apply -f frontend-deployment.yaml
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

kubectl apply -f frontend-service.yaml

瀏覽器訪問:

http://192.168.40.130:30001/

5.解除安裝k3s叢集

在server節點執行如下:

/usr/local/bin/k3s-uninstall.sh
在agent節點執行如下:
/usr/local/bin/k3s-agent-uninstall.sh