「開箱」訊飛翻譯機

最近公司買了一個新玩具,就是訊飛翻譯機

89f050a5-d2dc-42bf-86fd-96cf4022efdc

主要使用紙盒包裝
外盒算是有點質感的07712bd4-bf0a-48ae-90cd-3beaec968bb3打開外盒裡面也是使用紙盒作保護,算是相當的環保
而且為了避免機器刮傷
還有在與翻譯機接觸的邊緣及底部貼上絨布保護5bffde2b-0af6-463b-844f-e347eee125e4

配件我們可以看到有sim卡退卡針和mirco USB充電線
但缺點就是沒有充電頭6d94d5ff-88bf-435e-b0b3-35b44cba4a7f

這是他的開機畫面4f4914e8-2354-4edd-b3ba-841e7ea97068

很可惜的只有兩種語言介面可以選擇
1.簡體中文
2.英文
5779d0b5-e23a-4571-937f-dba7a85c6107

一開機就有更新要安裝
就讓他更新完再來測試吧6f94005c-16c0-421d-ae96-7888c32af674530e317f-1a7f-46b3-af6f-afef4b7719a1這更新一等就是半個小時
他是有雙向翻譯功能的
當你按著“中文”時,就可以說中文翻譯成他國語言
當你按著“ABC”時說將外國語言翻譯成中文
操作方式是按住按鍵說完話在放開
他就會做翻譯了7edb0f51-7095-4870-8a4f-d74c3b47bcf1

他是個觸碰螢幕
你可以在中文<=>英語的地方點選你要翻譯的語言95d0fc3d-92e0-46f1-89ed-5497ddc9a512

雖然支援的離線翻譯不多
但是大多語言只要你有網路都是可以翻譯的9738ff83-7a26-44c7-8f68-784eebd69edf

最神奇的是他還有人工翻譯的功能
但要註冊會員
它的介面感覺就是android系統
還可以開網頁上網
79f37713-ddae-4742-9a00-85588d3cb745

SOS怕他會真的打出去就沒特別試用了531cbdf3-dc4c-4f70-8054-6865ac26d5b1

也支援飛航模式帶上飛機也沒問題af6516b7-12e6-4c13-863c-bbdcb4676679

終點是他還可以當wifi分享機
出國可以把國外sim卡插在翻譯機做分享了
c509d3b6-2f2a-4b8c-9ea1-9acbdde2f724

重點他居然知道皮卡丘
還頗厲害的啊d8c553ea-2ea6-4f13-add3-7001186698c5

不知道之後跟新會不會有更多的離線語言翻譯a01d8e71-0c15-4946-a745-687a164c78ea

 

優點
1. 支援雙向翻譯
2. 有離線翻譯的功能
3. 可以使用sim卡網路
4. 可當熱點分享
5. 語言種類眾多(幾乎所有語言都有了)
缺點
1. 用語是大陸用語
2. 介面沒有繁體中文
3. 離線語言只有4種

工欲善其事,必先利其器

昨天剛好有機會跑去廠商的機房那邊做一個 POC (Prove Of Concept),雖然也是如莫非定律般的從下午搞到晚上快 11 點才出得來,而且還是個失敗的 POC。但正所謂三人行必有我師,今天還是留下個小驚喜。

驚喜就是,登登登… 這個吸在機櫃上的 LED燈

由於 POC 進行的不是很順利,有些空檔時間我就抓著對方問這個幹什麼的?吸在上面好像很酷,但實際上有什麼用途呢?

這廠商其實也挺妙,看起來他也挺自豪能想到這一招,馬上就 demo 給我看,第一,機櫃不是都有一些縱深嗎?儘管機房有公共照明,但機櫃基本上只有前後開孔,一般的公共照明是不足以照到機櫃裡面的,所以萬一有東西放比較深,或整線時剛好線藏在比較裡頭時,就可以拿來照:

這樣子是不是比較輕鬆也清楚多了?據這位老兄所述,以前他在照這類東西時,常會伸頭進去機櫃內看,那不但不符合人體工學,也容易有碰到線路的風險。當然這張圖我原本是想要照對方實際的整線狀況,但考慮到自己手殘會不小心動到線路的風險,還是用這個示意圖就好。

另外就是要看乖乖的保存期限也是很方便喔。隨著年紀越來越長,彎個腰都可能卡到的情況也都可能發生在自己身上了,LED磁吸燈這種隨處可見的東西並不怎麼高科技,但這位老兄會觀照自己的日常動作進而利用身邊的小東西來改善,的確是小弟值得學習的一點。

How to join windows node in K8S on GCP

最近在嘗試建立windows的node in K8S

以下是我的筆記,有興趣的同學可以參考一下

大部分步驟都跟微軟的文件差不多
Kubernetes on Windows

只有一小部分有些差異,主要是因為我的測試環境是在GCP上,所以在GCP firewall的設定上記得要allow pods跟service的網段,還有在建instance時在網路部分要將IP forwarding的功能開起來,以及routing要加,這樣不同node之間的pod才有辦法正常溝通

firewall allow for K8S pods and service
enable IP forwarding when create instance
routing for K8S pods
  1. build up a master node (Linux)
    由於目前windows server只能作為K8S的work node,所以我們還是需要建立一台Linux的server作為master node,在GCP我是使用CentOS 7的 image來作為master node,至於要怎麼建立master node我相信在網路上都有很多文件,以下是我的作法
    1. update system and install docker
      yum update -y
      
      yum install docker -y
      
      service docker start
      
      chkconfig docker on
    2. 由於只是測試環境,為了方便我會關閉firewall跟SELINUX
      service firewalld stop
      
      chkconfig firewalld off
      
      setenforce 0
      
      sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    3. create repo for K8S
      cat <<EOF > /etc/yum.repos.d/kubernetes.repo
      
      [kubernetes]
      
      name=Kubernetes
      
      baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
      
      enabled=1
      
      gpgcheck=1
      
      repo_gpgcheck=1
      
      gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      
      exclude=kube*
      
      EOF
    4. install kubeadm
      yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
      
      systemctl enable kubelet && systemctl start kubelet
      
      cat <<EOF > /etc/sysctl.d/k8s.conf
      
      net.bridge.bridge-nf-call-ip6tables = 1
      
      net.bridge.bridge-nf-call-iptables = 1
      
      EOF
      
      sysctl --system
      
      sysctl -w net.ipv4.ip_forward=1
    5. initial master node
      kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
      
      mkdir -p $HOME/.kube
      
      sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      
      sudo chown $(id -u):$(id -g) $HOME/.kube/config
      
      sudo sysctl net.bridge.bridge-nf-call-iptables=1
    6. 安裝網路模組for K8S
      根據微軟的文件如果要可以跟windows server相容建議是安裝flannel並使用host-gw模式
      1. 下載flannel yml檔
        yum install wget -y
        
        wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
      2. 將yml中的vxlan改成host-gw
      3. apply flannel
        kubectl apply -f kube-flannel.yml
    7. 將特定DS(daemonset)設定成只能跑在Linux node
      因為目前這些DS只能跑在Linux的container上,所以會把他們設成只跑在Linux server上
      kubectl patch ds/kube-proxy --patch "$(cat node-selector-patch.yml)" -n=kube-system
      
      kubectl patch ds/kube-flannel-ds-amd64 --patch "$(cat node-selector-patch.yml)" -n=kube-system

      patch的yml檔可以從這下載node-selector-patch.yml

    8. 到這windows node的K8S master node就完成了,接下來就是確認kube-system pods是否都有正常運作,還有DS的設定有沒有生效跟DS是否設成rolling update
      確認pods是否running
      確認DS的是否有限制只跑在linux node
      確認DS是否設成RollingUpdate
  2. join a windows work node
    1. 這邊我是使用GCP的Windows Server version 1803 Datacenter Core image作為work node,K8S的文件上是說windows 1709以上的版本都有支援,但要注意container的image只能使用跟OS同版本號的,不然會跑不起來,以下command都是使用Powerhsell操作

    2. install docker(這邊會需要重開機)
      Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
      
      Install-Package -Name Docker -ProviderName DockerMsftProvider
      
      Restart-Computer -Force
    3. pull docker image
      請下載與你OS相同的版本,這邊根據微軟的文件是要下載microsoft/nanoserver,但我後來發現k8s的docker file image不是用microsoft/nanoserver而是用mcr.microsoft.com/windows/nanoserver,所以我這邊就直接下載mcr.microsoft.com/windows/nanoserver
      docker pull mcr.microsoft.com/windows/nanoserver:1803
    4. tag docker image
      docker tag mcr.microsoft.com/windows/nanoserver:1803 mcr.microsoft.com/windows/nanoserver:latest
    5. 準備工作目錄for K8S
      mkdir c:\k
    6. copy master node的驗證檔($HOME/.kube/config)到c:\k目錄,有了這個才可以連到master node(可以用SCP copy,現在powershell也有SCP可以用喔)
    7. 下載安裝7-zip
    8. 下載Kubernetes binaries for windwos,並用7-zip將它解壓縮到c:\k目錄,其中會包含kubectl, kubelet, and kube-proxy這些binaries,我是下載1.13.1版,可以從這下載kubernetes
    9. 設定環境變數for K8S
      $env:Path += ";C:\k"
      
      [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\k", [EnvironmentVariableTarget]::Machine)
      
      $env:KUBECONFIG="C:\k\config"
      
      [Environment]::SetEnvironmentVariable("KUBECONFIG", "C:\k\config", [EnvironmentVariableTarget]::User)

      以上都設定好就可以使用kubectl連到master node

    10. 下載Flannel for window

      [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
      
      wget https://github.com/Microsoft/SDN/archive/master.zip -o master.zip
      
      Expand-Archive master.zip -DestinationPath master
      
      mv master/SDN-master/Kubernetes/flannel/l2bridge/* C:/k/
      
      rm -recurse -force master,master.zip
    11. join node
      cd c:\k
      .\start.ps1 -ManagementIP <Windows Node IP> -ClusterCIDR <pod-network-cidr> -ServiceCIDR <service-cidr> -KubeDnsServiceIP <Kube-dns Service IP>

      到這就成功join windows node到K8S了,請確定3支Powershell(kubelet, flanneld, kube-proxy)都有順利跑起來,有時Flannel 會跑不起來,需要手動再跑一次

      [Environment]::SetEnvironmentVariable("NODE_NAME", "<Windows_Worker_Hostname>")
      .\flanneld.exe --kubeconfig-file=c:\k\config --iface=<Windows_Worker_Node_IP> --ip-masq=1 --kube-subnet-mgr=1

  3. deploy a win-webserver on windows node
    wget https://raw.githubusercontent.com/Microsoft/SDN/master/Kubernetes/flannel/l2bridge/manifests/simpleweb.yml -O win-webserver.yaml
    
    kubectl apply -f win-webserver.yaml
    記得要把yml檔裡container的版本改成與你的windows node OS相同
    確認pods是否running
    確認service port
    access from internet