Kubernetes 部署 Crawlab 爬蟲管理節點集群

      網友投稿 919 2022-05-30

      前言

      Kubernetes(K8S) 是非常強大的容器編排工具,可以管理大型集群、微服務、分布式應用等等,是生產環境多節點部署中非常合適的選擇。

      而 Crawlab 作為分布式爬蟲管理平臺,同樣也支持 Kubernetes 部署。Kubernetes 部署適合比較大型的分布式應用,但如果您有幾臺機器,也是可以實踐的,Kubernetes 將降低您管理分布式應用的成本。

      如果對 Kubernetes 還不了解,可以在 Kubernetes 中文社區入門課程 中學習相關知識;如果您已經了解 Docker,可以參考另外一個比較不錯的免費資源,《從Docker到Kubernetes進階》;同時也推薦掘金的 《Kubernetes 從上手到實踐》 掘金小冊(付費)學習快速入門 K8S 集群的知識;如果想深入了解 K8S 的原理,建議學習極客時間上張磊的 《深入剖析Kubernetes》。注意,由于 Kubernetes 發展很快,可能很多教程的 K8S 版本已經有些老了,有些命令在新版本不生效,因此為了保證您使用的命令和配置是最新的版本,請開發者參考 Kubernetes 官方文檔。

      本篇文章將詳細介紹如何在一個 Kubernetes 集群上搭建 Crawlab 多節點應用。首先我們假設您有多臺服務器,操作系統均為 Ubuntu 16.04。

      推薦人群:

      需要在生產環境中實踐多節點部署 Crawlab 的開發者

      需要部署大規模爬蟲應用(例如分布式爬蟲)的開發者

      了解 Docker、Kubernetes 或希望學習相關知識的開發者

      前言

      Kubernetes(K8S) 是非常強大的容器編排工具,可以管理大型集群、微服務、分布式應用等等,是生產環境多節點部署中非常合適的選擇。

      而 Crawlab 作為分布式爬蟲管理平臺,同樣也支持 Kubernetes 部署。Kubernetes 部署適合比較大型的分布式應用,但如果您有幾臺機器,也是可以實踐的,Kubernetes 將降低您管理分布式應用的成本。

      如果對 Kubernetes 還不了解,可以在 Kubernetes 中文社區入門課程 中學習相關知識;如果您已經了解 Docker,可以參考另外一個比較不錯的免費資源,《從Docker到Kubernetes進階》;同時也推薦掘金的 《Kubernetes 從上手到實踐》 掘金小冊(付費)學習快速入門 K8S 集群的知識;如果想深入了解 K8S 的原理,建議學習極客時間上張磊的 《深入剖析Kubernetes》。注意,由于 Kubernetes 發展很快,可能很多教程的 K8S 版本已經有些老了,有些命令在新版本不生效,因此為了保證您使用的命令和配置是最新的版本,請開發者參考 Kubernetes 官方文檔。

      本篇文章將詳細介紹如何在一個 Kubernetes 集群上搭建 Crawlab 多節點應用。首先我們假設您有多臺服務器,操作系統均為 Ubuntu 16.04。

      推薦人群:

      需要在生產環境中實踐多節點部署 Crawlab 的開發者

      需要部署大規模爬蟲應用(例如分布式爬蟲)的開發者

      了解 Docker、Kubernetes 或希望學習相關知識的開發者

      推薦配置:

      Docker: 18.03+

      Kubernetes: 1.17.3+

      1. 節點安裝配置

      如果您已經有一個工作的 K8S 集群,您可以略過本節,直接跳到 2. 配置 Crawlab。

      1.1 安裝 Docker

      我們在 Docker 安裝部署 中已經詳細講述了如何安裝 Docker,請參考該小節的安裝教程在每一臺機器上安裝 Docker。

      ??注意:您需要在每一臺機器上安裝 Docker。

      1.2 安裝 Kubernetes

      安裝 Kubernetes 的過程比較繁瑣,建議您耐心操作。我們首先將在主節點上安裝和配置 Kubernetes,主節點名稱叫 master。

      如果您有比較好的網絡環境(例如在國外),可以考慮忽略這一步。

      這一步是將 Kubernetes 需要的基礎鏡像拉取下來,然而國內網速比較糟糕,我們需要用國內的阿里云的鏡像。

      生成一個名叫 pull_k8s.sh 的 shell 文件,輸入以下內容。

      #!/bin/bash

      KUBE_VERSION=v1.17.3

      KUBE_PAUSE_VERSION=3.1

      ETCD_VERSION=3.4.3-0

      DNS_VERSION=1.6.5

      username=registry.cn-hangzhou.aliyuncs.com/google_containers

      images=(kube-proxy:${KUBE_VERSION}

      kube-scheduler:${KUBE_VERSION}

      kube-controller-manager:${KUBE_VERSION}

      kube-apiserver:${KUBE_VERSION}

      pause:${KUBE_PAUSE_VERSION}

      etcd:${ETCD_VERSION}

      coredns:${DNS_VERSION}

      )

      for?image?in?${images[@]}

      do

      docker?pull?${username}/${image}

      docker?tag?${username}/${image}?k8s.gcr.io/${image}

      docker?rmi?${username}/${image}

      done

      然后在 shell 中執行以下命令。

      #?改變?pull_k8s.sh?為可執行文件

      chmod?+x?pull_k8s.sh

      #?運行?pull_k8s.sh

      ./pull_k8s.sh

      稍等一會兒,K8S 的基礎鏡像就拉取下來。接下來就可以準備啟動 K8S 服務了。

      #?獲取?Kubernetes?Server?安裝文件

      wget?-q?https://dl.k8s.io/v1.17.3/kubernetes-server-linux-amd64.tar.gz

      #?解壓縮安裝文件

      tar?-zxf?kubernetes-server-linux-amd64.tar.gz

      #?拷貝執行文件

      cp?kubernetes/server/bin/kube{adm,ctl,let}?/usr/bin/

      下載并解壓 CNI(Container Network Interface)插件的可執行文件。

      wget?https://github.com/containernetworking/plugins/releases/download/v0.8.5/cni-plugins-linux-amd64-v0.8.5.tgz

      mkdir?/opt/cni/bin?-p

      tar?-xf?cni-plugins-linux-amd64-v0.8.5.tgz?-C?/opt/cni/bin

      執行以下命令來配置 kubelet 和 kubeadm

      #?配置?kubelet.service

      cat?<<'EOF'?>?/etc/systemd/system/kubelet.service

      [Unit]

      Description=kubelet:?The?Kubernetes?Agent

      Documentation=http://kubernetes.io/docs/

      [Service]

      ExecStart=/usr/bin/kubelet

      Restart=always

      StartLimitInterval=0

      RestartSec=10

      [Install]

      WantedBy=multi-user.target

      EOF

      #?配置?kubeadm.service

      cat?<<'EOF'?>?/etc/systemd/system/kubelet.service.d/kubeadm.conf

      [Service]

      Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf?--kubeconfig=/etc/kubernetes/kubelet.conf"

      Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"

      EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env

      EnvironmentFile=-/etc/default/kubelet

      ExecStart=

      ExecStart=/usr/bin/kubelet?$KUBELET_KUBECONFIG_ARGS?$KUBELET_CONFIG_ARGS?$KUBELET_KUBEADM_ARGS?$KUBELET_EXTRA_ARGS

      EOF

      #?啟動?kubelet

      systemctl?enable?kubelet

      請在 root 權限下進行下列操作。

      #?初始化主節點

      kubeadm?init?--pod-network-cidr=10.244.0.0/16

      這里的 --pod-network-cidr 參數是為了適配 flannel ,一個網絡解決方案。如果對 flannel 不熟悉的可以網上自行搜索。

      執行完上述操作之后,您在命令行中看到一串輸出,類似如下內容。

      ...

      You?can?now?join?any?number?of?machines?by?running?the?following?on?each?node

      as?root:

      kubeadm?join?192.168.0.1:6443?--token?t14kzc.vjurhx5k98dpzqdc?--discovery-token-ca-cert-hash?sha256:d64f7ce1af9f9c0c73d2d737fd0095456ad98a2816cb5527d55f984c8aa8a762

      最后那一串 kubeadm join x.x.x.x:6443 --token xxxx --discovery-token-ca-cert-hash sha256:xxxx... 就是加入從節點的命令,您需要在從節點上執行這個命令。

      現在可以來配置網絡了,我們采用 flannel。

      執行以下命令來加入 flannel。

      kubectl?apply?-f?https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

      節點初始化完畢后,在命令行中輸入以下命令查看節點狀態。

      kubectl?get?nodes

      您將會看到類似如下輸出。

      NAME??????STATUS?????ROLES?????AGE???????VERSION

      master????Ready?????master????5m???????v1.17.3

      狀態 STATUS 為 Ready 表示節點已經成功初始化了。如果狀態為 NotReady,表示節點初始化時遇到了問題,需要排查異常。這時可以通過以下命令來查看日志。

      journalctl?-f?-u?kubelet.service

      現在的任務就是將剩余的服務器或節點加入到當前的 Kubernetes 集群來了。

      在運行 kubeadm join 加入一個工作節點之前,您需要在這個工作節點上執行 1.2.1-4 的步驟,這些都是安裝和配置 K8S 服務的基礎依賴,需要執行一下。

      執行完畢之后,我們來運行 kubeadm join 命令。在 1.2.5 中初始化后獲取的輸出還記得么, kubeadm join x.x.x.x:6443 --token xxxx --discovery-token-ca-cert-hash sha256:xxxx... 。復制粘貼這段命令,將其在 shell 中運行。等一會兒,您就可以看到輸出提示已經加入成功了。這時,我們驗證一下,輸入以下命令。

      kubectl?get?nodes

      得到的輸出類似如下。

      NAME??????STATUS????ROLES?????AGE???????VERSION

      master????Ready?????master????10m???????v1.17.3

      worker1???Ready?????????1m????????v1.17.3

      我們看到,名叫 worker1 的工作節點已經成功加入進來了,并為 Ready 狀態。

      ??注意:如果您關閉了了在之前啟動主節點后需要復制粘貼的 kubeadm join 命令,您可以通過 這篇文章 來加入工作節點。

      2. 配置部署 Crawlab

      K8S是通過 yaml 文件來配置應用的。下面我們將介紹如何配置 yaml 文件來配置 Crawlab 應用。同樣的,我們將配置主節點(Master)和工作節點(Node)。這里介紹兩種部署方式:首先我們將用一個快速配置的例子來部署 Crawlab 應用,這個只是預覽體驗用,不推薦應用在生產環境中;第二種是生產環境部署,相對來說更安全穩定。

      2.1 快速部署

      這里只是讓您快速體驗 K8S 部署 Crawlab 集群,不建議在生產中使用。在主節點(或主服務器)中執行以下命令。

      #?生成?MongoDB?PV(Persistent?Volume)

      kubectl?apply?https://raw.githubusercontent.com/crawlab-team/crawlab/master/k8s/mongo-pv.yaml

      #?啟動?MongoDB

      kubectl?apply?https://raw.githubusercontent.com/crawlab-team/crawlab/master/k8s/mongo.yaml

      #?啟動?Redis

      用 Kubernetes 部署 Crawlab 爬蟲管理節點集群

      kubectl?apply?https://raw.githubusercontent.com/crawlab-team/crawlab/master/k8s/redis.yaml

      #?啟動?Crawlab?主節點

      kubectl?apply?https://raw.githubusercontent.com/crawlab-team/crawlab/master/k8s/crawlab-master.yaml

      #?啟動?Crawlab?工作節點集群

      kubectl?apply?https://raw.githubusercontent.com/crawlab-team/crawlab/master/k8s/crawlab-worker.yaml

      啟動好上述服務之后,等待一段時間讓 Pod 啟動起來。執行 kubectl get pods -n crawlab 查看 Pod 狀態。對 Pod 不了解的開發者可以參考一下 官方文檔。

      然后,我們打開瀏覽器,在地址欄輸入 http://:30088 就可以看到 Crawlab 的登錄界面。

      2.2 生產環境部署

      在 K8S 上做持久化是一個比較繁瑣的事情,因此我們建議您先通過 Docker 或直接安裝或云儲存服務的方式來搭建 MongoDB 和 Redis 數據庫。這里我們假設您已經有可用的 MongoDB 和 Redis 數據庫。

      首先復制一份 crawlab-master.yaml 到本地。

      wget?https://raw.githubusercontent.com/crawlab-team/crawlab/master/k8s/crawlab-master.yaml

      這個文件的內容如下。

      apiVersion:?v1

      kind:?Service

      metadata:

      name:?crawlab

      namespace:?crawlab

      spec:

      ports:

      -?port:?8080

      targetPort:?8080

      nodePort:?30088

      selector:

      app:?crawlab-master

      type:?NodePort

      ---

      apiVersion:?apps/v1

      kind:?Deployment

      metadata:

      name:?crawlab-master

      namespace:?crawlab

      spec:

      strategy:

      type:?Recreate

      selector:

      matchLabels:

      app:?crawlab-master

      template:

      metadata:

      labels:

      app:?crawlab-master

      spec:

      containers:

      -?image:?tikazyq/crawlab:latest

      name:?crawlab

      env:?#?這里是?Crawlab?的環境變量配置

      -?name:?CRAWLAB_SERVER_MASTER

      value:?"Y"

      -?name:?CRAWLAB_MONGO_HOST?#?MongoDB?地址,請改變為實際?MongoDB?地址

      value:?"mongo"

      -?name:?CRAWLAB_REDIS_ADDRESS?#?Redis?地址,請改變為實際?Redis?地址

      value:?"redis"

      ports:

      -?containerPort:?8080

      name:?crawlab

      這里需要做的是稍微修改一下上述的容器環境變量,將數據庫配置更改為實際的數據庫地址。Crawlab 的詳細配置請參考 配置章節。

      然后執行下列命令使配置生效。

      kubectl?apply?-f?crawlab-master.yaml

      復制一份 crawlab-worker.yaml 到本地。

      wget?https://raw.githubusercontent.com/crawlab-team/crawlab/master/k8s/crawlab-worker.yaml

      用編輯器打開 crawlab-worker.yaml。

      apiVersion:?apps/v1

      kind:?Deployment

      metadata:

      name:?crawlab-worker

      namespace:?crawlab

      spec:

      replicas:?4?#?多少個工作節點

      strategy:

      type:?Recreate

      selector:

      matchLabels:

      app:?crawlab-worker

      template:

      metadata:

      labels:

      app:?crawlab-worker

      spec:

      containers:

      -?image:?tikazyq/crawlab:latest

      name:?crawlab

      env:?#?這里是?Crawlab?的環境變量配置

      -?name:?CRAWLAB_SERVER_MASTER

      value:?"N"

      -?name:?CRAWLAB_MONGO_HOST?#?MongoDB?地址,請改變為實際?MongoDB?地址

      value:?"mongo"

      -?name:?CRAWLAB_REDIS_ADDRESS?#?Redis?地址,請改變為實際?Redis?地址

      value:?"redis"

      需要做的就是設置 spec.replicas 來確定啟動多少個工作節點。然后就是配置 Crawlab,詳細配置請參考 配置章節。

      然后執行下列命令使配置生效。

      kubectl?apply?-f?crawlab-worker.yaml

      執行以下命令來查看 Pod 部署情況。

      kubectl?get?pods?-n?crawlab

      輸出結果如下。

      NAME??????????????????????????????READY???STATUS????RESTARTS???AGE

      crawlab-master-6f8688cfdd-cc8b6???1/1?????Running???0??????????10m

      crawlab-worker-6cc6f476f4-bjrbr???1/1?????Running???0??????????7m

      crawlab-worker-6cc6f476f4-t9shl???1/1?????Running???0??????????7m

      crawlab-worker-6cc6f476f4-w8mc8???1/1?????Running???0??????????7m

      crawlab-worker-6cc6f476f4-sg5px???1/1?????Running???0??????????7m

      這時打開瀏覽器,在地址欄輸入 http://:30088 就可以看到 Crawlab 的登錄界面。

      參考

      Crawlab Github: https://github.com/crawlab-team/crawlab

      Crawlab Demo: http://crawlab.cn/demo

      Crawlab 文檔: https://docs.crawlab.cn

      總結

      Go Kubernetes

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:python logging 日志模塊以及多進程日志
      下一篇:軟件工程之思系列---初窺門徑
      相關文章
      久久久久亚洲AV无码专区网站 | 亚洲日韩国产精品第一页一区| 亚洲人成色99999在线观看| 精品日韩亚洲AV无码一区二区三区| 亚洲精品无码mv在线观看网站| 亚洲一区二区三区在线视频 | 亚洲无人区码一二三码区别图片 | 亚洲女人被黑人巨大进入| 亚洲av无码成人精品区在线播放 | 日木av无码专区亚洲av毛片| 亚洲成a人片77777老司机| 亚洲精品国产精品乱码视色 | 成人亚洲国产va天堂| 一区二区亚洲精品精华液 | 在线亚洲午夜片AV大片| 亚洲免费闲人蜜桃| jlzzjlzz亚洲jzjzjz| 亚洲中文字幕无码mv| 亚洲AV无码AV男人的天堂不卡| 亚洲国产精品无码久久九九大片| 亚洲AV成人一区二区三区观看| 国产精品亚洲专区一区| 亚洲精品成人在线| 亚洲熟妇无码八AV在线播放| 国产亚洲av片在线观看播放| 久久精品国产亚洲AV麻豆~| 久久亚洲精精品中文字幕| 亚洲色欲www综合网| 亚洲an日韩专区在线| 亚洲欧美日韩中文无线码 | 久久精品国产精品亚洲毛片| 亚洲国产国产综合一区首页| 亚洲一区影音先锋色资源| 亚洲大香人伊一本线| 亚洲第一男人天堂| 亚洲aⅴ天堂av天堂无码麻豆 | 久久精品a亚洲国产v高清不卡| 亚洲伊人久久大香线焦| 亚洲欧美日韩中文无线码| 亚洲国产高清精品线久久| 亚洲熟妇av一区二区三区|