国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

在 k8s 里部署 workerman-chat

cloudbeer

0 workerman 介紹

Workerman 是一個 PHP 編寫的高性能的 socket 服務(wù)器通訊框架,用于快速開發(fā)各種網(wǎng)絡(luò)應(yīng)用,包括tcp的、udp的、長連接、短連接應(yīng)用。

但他的官網(wǎng)并未提供 K8S 部署教程。下面咱們來用 K8S 部署一下 workerman-chat,他的源代碼在 https://github.com/walkor/workerman-chat。

本教程的包含了他的源代碼(僅作為示例代碼保存,代碼版權(quán)屬于原作者,正式部署請至 Workerman 官方下載),修改了部分代碼,修改處會在下文中說明。

本文的 git 地址在 https://github.com/cloudbeer/workerman-chat-k8s

我們將按照如下的架構(gòu)部署:
部署架構(gòu)

docker 鏡像均已經(jīng)上傳到 hub.docker.com,本文的腳本可以在騰訊云 TKE 中直接運(yùn)行。

部署腳本如下:

kubectl apply -f ns.yaml
kubectl apply -f register.yaml
kubectl apply -f gateway.yaml
kubectl apply -f businessworker.yaml

1 編寫 Dockerfile & 修改源代碼

workerman 運(yùn)行環(huán)境,需要安裝 pcntl,代碼如下。
這個 docker 包標(biāo)記為:cloudbeer/workerman-base:1.0

FROM php:7.3

RUN docker-php-ext-configure pcntl --enable-pcntl \
    && docker-php-ext-install pcntl

我們使用分布式部署,所以需要修改 gateway 代碼中的注冊地址:127.0.0.1,但在容器中分布式部署,我們無法得知pod 的 ip,故改成動態(tài)獲取 ip 的方式。
register 的 ip 也未知,但在 K8S 中,這個地址可以通過 service 發(fā)布出來,我們暫且命名這個服務(wù)為 register,gateway 和 businessworker 中注冊中心的地址修改為 register 即可。

Applications/Chat/start_gateway.php,修改如下:

//....
// 分布式部署時請設(shè)置成內(nèi)網(wǎng)ip(非127.0.0.1)
// $gateway->lanIp = '127.0.0.1';
$gateway->lanIp = getHostByName(getHostName());

//....

// 服務(wù)注冊地址
// $gateway->registerAddress = '127.0.0.1:1236';
$gateway->registerAddress = 'register:1236';

//....

Applications/Chat/start_businessworker.php,修改如下:

//....

// 服務(wù)注冊地址
// $worker->registerAddress = '127.0.0.1:1236';
$worker->registerAddress = 'register:1236';

//....

打包代碼(別忘記 composer install 一下先):

FROM cloudbeer/workerman-base:1.0
RUN mkdir /app
COPY ./workerman-chat /app

2 部署 register

apiVersion: apps/v1
kind: Deployment
metadata:
  name: workerman-chat-register
  namespace: workerman
  labels: 
    app: workerman-chat-register
spec:
  replicas: 1
  selector:
    matchLabels:
      app: workerman-chat-register
  template:
    metadata:
      labels:
        app: workerman-chat-register
    spec:
      containers:
      - name: register
        image: cloudbeer/workerman-code:1.0
        resources:
          requests:
            memory: "1Gi"
            cpu: "500m"
          limits:
            memory: "1Gi"
            cpu: "500m"
        ports:
        - containerPort: 1236
          protocol: TCP
        command: [php, /app/Applications/Chat/start_register.php, start]
---
apiVersion: v1
kind: Service
metadata:
    name: register
    namespace: workerman
spec:
    selector:
      app: workerman-chat-register
    ports:
    - protocol: TCP
      port: 1236
      targetPort: 1236

3 部署 gateway

部署 gateway 的 pod,由于需要對外提供服務(wù),使用了 LoadBalancer 的 service 發(fā)布服務(wù)。這里也可以創(chuàng)建 ingress 來發(fā)布服務(wù)。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: workerman-chat-gateway
  namespace: workerman
  labels: 
    app: workerman-chat-gateway
spec:
  replicas: 1
  selector:
    matchLabels:
      app: workerman-chat-gateway
  template:
    metadata:
      labels:
        app: workerman-chat-gateway
    spec:
      containers:
      - name: gateway
        image: cloudbeer/workerman-code:1.0
        resources:
          requests:
            memory: "1Gi"
            cpu: "500m"
          limits:
            memory: "1Gi"
            cpu: "500m"
        ports:
        - containerPort: 7272
          protocol: TCP
        command: [php, /app/Applications/Chat/start_gateway.php, start]
---
apiVersion: v1
kind: Service
metadata:
    name: gateway
    namespace: workerman
spec:
    type: LoadBalancer
    selector:
        app: workerman-chat-gateway
    ports:
        - protocol: TCP
          port: 7272
          targetPort: 7272

4 部署 businessworker

businessworker 在內(nèi)部工作,只需要部署 pod 即可。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: workerman-chat-businessworker
  namespace: workerman
  labels: 
    app: workerman-chat-businessworker
spec:
  replicas: 1
  selector:
    matchLabels:
      app: workerman-chat-businessworker
  template:
    metadata:
      labels:
        app: workerman-chat-businessworker
    spec:
      containers:
      - name: businessworker
        image: cloudbeer/workerman-code:1.0
        resources:
          requests:
            memory: "1Gi"
            cpu: "500m"
          limits:
            memory: "1Gi"
            cpu: "500m"
        command: [php, /app/Applications/Chat/start_businessworker.php, start]

測試服務(wù)

workerman-chat 提供了一個 聊天室的 web 測試端。

下面我們在本地啟動這個聊天室:
先修改 websocket 的目標(biāo)地址,為 gateway 的 Loadbalancer 的地址(假設(shè)為 1.2.3.4),修改 Applications/Chat/Web/index.php 文件如下:


       // ws = new WebSocket("ws://"+document.domain+":7272");
       ws = new WebSocket("ws://1.2.3.4:7272");

本地啟動:

php ./Applications/Chat/start_web.php start

打開瀏覽器:http://localhost:55151

多開幾個聊天室,完美運(yùn)行。

擴(kuò)充實例

按照 workerman-chat 的文檔,gateway 和 businessworker 可以擴(kuò)展。register 為單實例,不能擴(kuò)。

現(xiàn)在可以試著擴(kuò)沖 businessworker 的數(shù)量:

kubectl scale --replicas=3 -f businessworker.yaml

或者直接修改 yaml 的 replicas 的數(shù)量。

擴(kuò)展成功后,多開幾個聊天室,就會發(fā)現(xiàn) businessworker 的 pod 的日志開始接收聊天信息了。
測試的時候需要注意:只有新用戶加入的時候,新擴(kuò)展的 businessworker 才提供服務(wù)。

同理可擴(kuò)充 gateway,gateway 的服務(wù)由 LoadBalancer 負(fù)載,經(jīng)測試,聊天正常。

正式運(yùn)行環(huán)境也可以使用 HPA 自動伸縮。

4167 0 3
0個評論

年代過于久遠(yuǎn),無法發(fā)表評論

cloudbeer

186
積分
0
獲贊數(shù)
0
粉絲數(shù)
2021-05-25 加入
??