程式設計週記[2016/10/28]: Dyn 被攻擊的事件,讓我們了解網路有多重要 XD

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

管理的事情越多,忙碌的部分也就更多.加上最近身體不是很舒服,剛剛辦完了 Golang Taipei Gathering 10 月份的聚會後,馬上就生病了.

整理這個禮拜的 twitter ,發現似乎變得有點少,看來得除了讓自己在公司的事情之外,還是得要好好學習東西.才不會讓自己每天忙碌而忘記真的想要學習的事物.



Go

Benchmarking go redis server libraries

Redis (redis.io) 是相當知名的 in-memory data structure store .

這一篇比較了兩個比較知名的 Redis Golang Framework 的效能評比 redcon 跟 redeo 兩個套件在都略遜於 Redis 本身的 throughput ,作者覺得那些的效能問題可能來自於 Golang 的 GC 的處理上.

大家可以參考看看:

Building Blockchain Networks

Chain 是一個 BlockChain 服務的公司,提供透過 blockchain 技術的金流與安全的資訊服務.

相關訊息之前有板友貼過, 不過在這裡增加一些其他資訊:

  1. Chain 公司內部人員有一位是 Keith Rarick 是之前是 Heroku 做出 Go official buildpack 的大大 KR Github

  2. 根據 Reddit 上面的討論,如果你使用這個服務而沒有 AGPL 的話,你就得付企業的 License 費用 Reddit link

GOROUTINE 執行相關討論

上週有人在 Golang.TW 的 Slack 問了一個關於 goroutine 的相關問題.

關於 goroutine 的程式為什麼不會列印在 thread 裡面的傳值部分. 這篇文章有清楚的分析原因與為什麼,感謝 KerkerJ 的紀錄與分析.

digitalocean/go-qemu: Go packages to interact with QEMU using the QEMU Machine Protocol (QMP). Apache 2.0 Licensed.

qemu 是一個虛擬機器的軟體,而這個套件可以使用 Golang 來透過 QMP 來操作 qemu.

Podcasts about Go (golang)

所有跟 #golang 相關的 podcast 列表



Python



Android/JAVA/NODE.JS/Scala

How to build your own Uber-for-X application

介紹如何透過 node.js 跟 一些資料庫語法,來打造自己的 Uber-for-X (也就是類似 Uber 一樣的 Online to Offline )的軟體.



Docker

Selling the C-Suite on Containers - Container JournalContainer Journal

如何向高層推薦 container 技術

从威胁到整合,容器将改变openstack的未来? - OSC源创君的个人空间 - 开源中国社区

Container 是否會



Kubernetes

Learn Kubernetes the Hard Way (the Easy and Cheap Way)

Kelsey Hightower (Google Kubernetes 的傳教士) 的文件 kubernetes-the-hard-way (透過硬派方式來安裝 Kubernetes) 一直都是了解與安裝 Kubernetes 最基本的安裝手冊.但是由於真的太困難而變成許多人望而卻步.(不然就是透過 minikube 或是直接使用 GKE)

這篇文章,透過相同的方式來安裝.但是卻幫你透過 Vagrant 來安裝的方式幫你把 Kubernetes 安裝起來.一鍵可以輕鬆完成,實在相當的方便啊.



iOS/Swift



其他程式語言



論文收集



Machine Learning

Machine Learning is Fun!

很基本的 Machine Learning 的一系列介紹文章,主要就是希望大家能夠有基礎的了解.

並且透過如何估計房屋的價值來做一段簡單的範例程式.一共有五篇相關文章.

Machine Learning in a Week

這篇文章很有趣的敘述了一個對於 Machine Learning 有一點點了解的工程師 (上過 Andrew Ng 一半課程的人) 如何透過一個禮拜的學習來好好搞懂 Machine Learning.

很適合像我這樣的人來好好仿效.



網站文章

StarUML

Mac 上面免費又好用的 UML 工具,也可以話 ER-Diagram 跟 Class Diagram .

Linux进程隐藏的一种实现思路

讓我們土炮 Google Doc: Let’s make own Editor like Google Docs

Fred Chien 很厲害的前端工程師.介紹如何透過 JS 來自幹自己的 Google Doc .

Kontena: an alternative container orchestrator

除了 Docker Swarm, Kubernetes 與 DCOS 之外,另外一套的 Container Orchestrator 的生態套件.不過適用 Ruby 開發的.ㄋ

[請益] 自動化佈署(Chef, Ansible, Salt)

相當精彩的問答,關於自動化佈署工具教學與學習部分.



網站收集



有聲書/影片心得



程式設計週記[2016/10/21]: 優秀的創意到產品間存在著巨大的鴻溝,需要不斷的努力與調整

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

工作上許多事情排擠我學習的時間,時間太少只好犧牲掉睡眠時間來學習與寫代碼.

神是公平的,不論你的種族與性別.他都只給你 24 小時,你要把時間花在哪些地方,成功就在哪些地方. 

(半夜醒來,發現一堆大大已經在努力學習有感)

下週三要有 Golang Taipei 聚會,希望大家都來參加啊. 沒有票的可以來找我拿閃電秀的票(前提是來當講者 :p )



Go

redspread/spread : Docker to Kubernetes in one command https://redspread.com

透過 git-like 的指令能夠部署 Docker 跟 Kubernetes , RedSpread 提供相當方便的指令來部署你的服務.

最近 RedSpread 加入 CoreOS 了…. CoreOS 越來越多 Go 的大專案

Why you should not use iris for your Go projects

Iris 是一個號稱地表上最快的 Web Framework,擁有 5000+ star 的專案,但是想要申請 Awesome-Go 卻被 ban 掉的整個故事. 這篇文章,從多個角度建議你不應該把 Iris 當作你的專案中,故事精彩就直接看內文吧.

懶人包:

  1. Iris 被 Awesome-Go 移除
  2. Iris 的 Kataras 申請重新加入.
  3. 被人發現把 PR 改掉,License 亂寫
  4. 被 Awesome-Go 拒絕並且 Ban 掉
  5. Kataras 把 Iris commit 改成只有兩個 (哪招?)
  6. Kataras 修改自己在 git issue 裡面的發言

參考 : Awesome-Go Github PR

mesosphere/mesos-dns : DNS-based service discovery for Mesos

各種 Cluster Orchestration 軟體 (mesos or kubernetes ) 都會內建一套有用的 DNS . Mesos 用的就是這套的 mesos-dns ,而 Kubernetes 就是會逐漸轉向使用 SkyDNS

有趣的是兩套都是 Golang 寫的.

go-vgo/robotgo : RobotGo,Golang Native cross-platform system automation

這個很實用啊.跨平台的自動化系統.. (滑鼠精靈,自動點擊)都可以用

#### https://github.com/campoy/go-web-workshop Francesc Campoy Google 傳教士帶來一系列的課程關於如何透過 #Golang 來建置 Web Application

ASP.NET Core vs Go data ingestion benchmark

效能評比關於 Go 與 ASP .NET Core (也就是 .Net 跨平台的版本) 在 Data Ingestion 上的比較.

結論: Go 快三倍

rekihattori/awesome-programmers : A list of history’s greatest

傑出程序員(捲舌音) 清單

裡面有四個人跟 Golang 有關係

在作業系統分類中:

  • Ken Thompson: Go 創始人之一,也是 C 語言的共同發明者.
  • Rob Pike: Go 創始人之一,主要管理整體架構與之後發展.
  • Russ Cox: 許多好用的 Go 工具都是他起頭撰寫,不論是 gofmt 還是 goimport .
  • Brian Kernighan: 賣最好的 Go book作者 . 書本的鏈結

還有一個在資料庫的分類:

  • Brad Fitzpatrick: LiveJournal 的創辦人,並且是 OpenID 制定協定的人.目前主要負責 Golang net/http 的相關開發.

Write React Components in Go

如何透過 GopherJS 來撰寫 React Component .



Python



Android/JAVA/NODE.JS/Scala

comdan66/livemaps: LiveMaps

LiveMaps 是一個即時地圖聊天室,城市角落的心情寫照,網站藉由 Google 所提供的 Firebase 的 Realtime Database 以及 Google Maps JavaScript API 免費服務實作。

透過 LBS 的即時聊天系統.



Docker



Kubernetes

Running Socket.IO Applications on Kubernetes

如何在 架設在 AWS 的 Kubernetes 上面建立一個 Socket.IO 的應用服務.

找機會改成給 GCP 的 :)

Red Hat Announced Fully Containerized Red Hat Mobile Application Platform 4.2

Red Hat 許多動作都讓人覺得他們在 Container 架構下會越來越有發展性. 不論是 Windows Container 或是這個 Mobile Application Platform



iOS/Swift



其他程式語言



論文收集



Machine Learning

AI领域,中国人/华人有多牛?

除卻人口比較多外,華人的論文數與影響力都不容小覷.

What is POS (Part of Speech) Tagging? How can I use it?

關於 NLP 裡面如何妥善利用 Part Of Speech .

論文: Using Reinforcement Learning for Autonomic Resource Allocation in Clouds: Towards a Fully Automated Workflow

這篇論文透過 Q-Learning 來做電腦資源的重配置.裡面有談到不少有趣的點子.

主要的點子如下:

  • s: Situation
  • w: Workload
  • u: VM (or Machines)

(s, w, u) \(->_a\) (s, w’, u’)

U' = U + a (action) 

其中 a 指的是新開的機器.

最後就是要談到 Q-Learning 中的 Reward

	R(s', a) = CO(a) + PE(s')

其中:

CO(a): 為開啟機器的動作 a 所造成的成本
PE(s'): 處罰,也就是改變後的情況如果依舊不滿足 SLA .的處罰費用.

感謝同事的指導.



網站文章



網站收集



有聲書/影片心得

Podcast: Netflix Scheduling with Sharma Podila (Mesos)

這篇文章主要訪問了 Netflix - distributed systems software architect 來討論 Netflix 如何來使用 Mesos 做 Scheduling 所有的服務.

並且透過 Matis (reactive stream processing platform)

完整內容可以參考這篇 Netflix 技術文章

Steve Jobs 遺失的訪談

每次看到這段,都會提醒自己不要忘記熱情

公司變得大之後,就容易因循守舊 他們認為只要遵守流程,就能夠再度奇蹟似取得成功 員工很快地… 就把遵守流程與紀律當作是工作本身…

IBM 就是如此… 他們是世界上最完善流程的公司… 員工是最守紀律的,但是他們忘記產品

Apple 也是如此 (接近 20 年前) 我們有很多擅長管理流程的人才 他們卻忽略了產品的本身…

經驗告訴我,優秀的人才是一心想著讓產品更好的人

而光靠流程是做不出好的產品…



程式設計週記[2016/10/14]: Learning how to using Machine Learning

這是什麼?

程式週記主要內容如下:

Gihub project 介紹:

  • 主要會貼一些github,但是會盡量寫上一些有用的評語(或是我容易想到的關鍵詞)幫助以後查詢

網路文章心得:

  • 會寫些心得,強迫自己閱讀.

“程式週記”並且定期週期性更新.

大部分內容在我的twitter都會有,這邊只是將一些簡單的心得與感想註解一下.

本週摘要

小孩子得了腸病毒,在家休養了一個禮拜.每天都在學習機器學習 (好像回文).

這次竟然花了兩個禮拜才整理出來,下週要改進.



Go

sourcegraph/checkup : Distributed, lock-free, self-hosted health checks and status pages

checkup 是一個 #golang 專門拿來做應用程式健康檢查 (Health Check) 用的工具.

你可以使用 JSON 定義要檢查的應用程式網路與方式 (TCP/HTTP) 然後使用 CLI 的方式來執行.

也提供直接在 Programming 處理的方式. 支援 HTTP, TCP (並且支援 TLS) 與 AWS S3. 運用層面相當廣泛的好工具…

他們也寫了篇部落格來解釋他們為何需要自行研發這樣的產品. Why we open-sourced our uptime monitoring system

heetch/LAPJV: Go implementation of the LAPJV algorithm

這個用來解決 Assignment Problem (任務指派問題)也就是將 n 個工作分配給 m 個人如何達到最大的有效的分配方式的問題.

一般而言的解決方式會是透過匈牙利演算法,而這段代碼使用了另外一個方式 Liner-Assignment-Problem Jonker-Volgenant algorithm 來大大的提升計算效能. 似乎無法找到論文(要錢),不過這邊有稍微講到如何做到 LAPJV .

astaxie/bat : Go implement CLI, cURL-like tool for humans

類似 httpie 使用 Golang 作出的 CLI curl 工具。 這個套件的作者 Asta Xie 也就是 BeeGo 的作者.

參考 Httpie 重新以 Go 來打造的工具,使用了 Go Routine 讓整個軟體更加具有效能.

noqcks/gucci : A simple cli templating tool written in golang

noqcks/gucci 使用 #golang 寫的 template 工具。 可以透過樣板的替換方式,來讀取系統變數或是執行結果。

EBOOK : Webapps in Go (without) framework

免費的 #Golang Ebook ,使用最基本的 built-in package 來建置 Go Web App.還有 Go 語言的基礎教學,還不錯的書籍.

pygo: Interpreters in Go and for Go

pygo: 用 Golang 寫的 Go interpreter ,這篇是介紹的 slide

TheNewNormal/corectl : CoreOS over macOS made very simple

TheNewNormal/corectl 可以讓你在 Mac 上面很容易的安裝 CoreOS VM ,想要學習 rkt 也會變得比較方便.

tidwall/finn: Fast Raft framework using the Redis protocol for Go

finn 提供了簡單的方式可以讓你架設 Raft framework 並且可以直接跟 Redis 串接.

狗洞

玩了一下對岸朋友今天介紹的這個狗洞(dtunnel),真的是很神奇的東西,也是Golang寫的開源軟件,剛剛測試了一下,有點嚇到,居然security group firewall什麼的都不用開就能p2p建立起tunnel,而且p2p mode速度還不賴!如果沒有安全疑慮的話,應該是一個很值得期待的東西。

Context package in Go

講解 Go 1.7 的 context 還有一些簡單的範例與使用方式說明.

gRPC Envoy Nghttp2 and Load Balancing

一個簡單的範例來講解如何讓 grpc server 來做 load balancing .

kfirufk/go-angular2-material-auth0-and-more : a starter kit for go and angular2 and other goodies

教學如何使用 Go 與 Agular2 從無到有來架設網站.

Slide: Utilizing the Go 1.7 SSA Compiler

講解如何調教 Go 1.7 的 SSA Compiler 來讓程式碼更快.順便也帶出了 SSA 的基本原理與 SSA 帶給 compiler 的相關功能.



Python



Android/JAVA/NODE.JS/Scala

在 2016 年学 JavaScript 是一种什么样的体验?

透過想從今年學習 Java Script 的問答來了解有多少種 JS framework .

GCPUG meetup 201610 - Dataflow Introduction

舒服二人組簡介一下Google在BigData Solution上的Dataflow



Docker



Kubernetes

PalmStoneGames/kube-cert-manager : Manage Lets Encrypt certificates for a Kubernetes cluster.

如何在 Kubernetes 中使用 Let’s Encrypt .



iOS/Swift



其他程式語言



論文收集



Machine Learning

Cross Industry Standard Process for Data Mining

很少會收集 Wiki,不過這篇清楚的講解了跨產業的 Data Mining 需資料處理流程.可以算是 Machine Learning SOP.

人工智能革命:为什么深度学习会突然改变你的生活

中文列表:

原文文章

[summarization] “A survey on transfer learning,” Sinno Jialin Pan and Qiang Yang « Birdman’s Blog

簡單介紹什麼是 Transfer Learning

Predicting Disk Replacement towards Reliable Data Centers

3萬台硬碟,來自兩家大廠,監測超過 17 個月,準確率 98%

Paper: Predicting Disk Replacement towards Reliable Data Centers

台灣資料科學愛好者年會: 一天搞懂深度學習 心得筆記

iHower 的心得,相當清楚的紀錄深度學習.



網站文章

辦一場自己在場的葬禮:一名軟體工程師的死亡習題

Pieter Hintjens 為 ZeroMQ 的創辦者也是眾所皆知的軟體工程師之一,在癌症末期的時候寫了 〈臨終協議〉(A Protocol of Dying) 更是讓人覺得寫得真好.

在 10/04 的時候,他簽下來安樂死的同意書在下午一點的時候選擇了安樂死.他在之前也辦過了生前喪禮,讓人無盡的緬懷他.

How We Switched Without A Hitch To A New API : 一個新的想法關於 JSON Diff

這篇文章主要講解某一間公司的 API 升級的方式,使用的人想要了解哪些 API 更改了造就回傳的 JSON 變動,哪些沒有變更.

所以這篇文章就變成很清楚地探討判別兩段 JSON 是否是相同的演算法討論.

如何敘述差異(Diff)

Longest Common Subsequence (hereafter LCS) 是裡面提到的概念,也就是針對兩個 JSON 的 DIFF,我們必須要透過最少的文字來敘述.舉例而言

  • [1, 2, 3] –> [1, 3]

我們都會說是 [2] 被拿掉了,但是卻有另外一種講法是 [2 +1] 然後拿掉原本的 [3]

求解出 LCS 的方式本身是一種 Dynamic Programming .

相似度 (similarity) 的敘述方式
  • 只專注在 Value 比對,對於 Key 值的變動不會改變. (Key rename)
  • 數值相似為 “1” ,不相似為 “0”
  • 如果是一個 List 就是取平均.
減少索引變動的差異 (Index Shifting)

對於索引變動的處理方式:

  • 重新排列組合,透過 Key 值的先後
  • 排列成環狀來比對,避免找過的在前面.
結語

程式碼在這裡

Api.ai vs Wit.ai (or is it Google vs Facebook?)

兩組自然語言網站的比較,蠻適合深入了解的.

漫谈Domain Flux僵尸网络

Zombie Network

Scaling Conversational Commerce

講解如何擴展你的 Conversational Commerce (交談式經濟)

opentracing/opentracing-go : Go implementation of the OpenTracing API

跟隨 Kubernetes 與 Prometheus 之後, 第三個加入 CNCF 的專案 OpenTracing ,可見他有多重要.

這裡有 CNCF 的官方公布文件: OpenTracing Joins the Cloud Native Computing Foundation

Orchestrating GPU-Accelerated Workloads on Amazon ECS

Docker包進NVIDIA CUDA Driver之後可以直接存取GPU資源

Our agile journey in GovTech so far

新加坡政府的 Agile contracting 很出名啊

申請 Let’s Encrypt 免費憑證讓網站支援 HTTP2

【高效自學術】如何找到一份「深度學習」的工作?讓這些資源充實你必備的知識!



網站收集

災害警示公開資料彙整

P2P with webrtc 確保來源網站,不會被 ddos 打死了

MIT 開放課程,介紹關於 AI 的部分

Redis性能问题排查解决手册

【HITCON TALK - 金融資安研討會】- 講師簡報公佈 | Hacks in Taiwan Conference 台灣駭客年會



有聲書/影片心得



[Kubernetes] Authorization and Admission Survey

This slide show some note about Authorization and Admission in Kubernetes.

It include some detail about:

Authorziation

  • ABAC
  • RBAC

Admission

  • Service Account
  • Secret

Still working understanding how to do Authenication in Kubernetes.

[GCPUG] 參加 GCPUG + Flink 小筆記

前言

話說強者我同事 Simon SuGCPUG 是主辦者. 當然還是得特地跟老婆請假來彭場一下,加上本週有不少資料科學相關的講題.

1. Apache Beam in Big Data Pipeline by Randy Huang - Data Architect at VMFive

Why use beam?

  1. If you want to decompose your task into pipeline. You can focus on algorithm.

  2. It could run on Flink, Storm and Spark. So you can write code once run anywhere.

Q&A

  1. What is the pain point if such application has so much runner? (spark, flink, storm)
    • Ans:
      • No, pain point until now. Sometime CEP for Flink but might not able to use in Beam.
      • Beam is follow Flink related API closely.

2.Kubernetes 使用心得分享 by Gene Liu / LIVEhouse.in

  • Self healing in second.
  • Master will use 0.4 CPU in etcd.

Q&A

  • Is any way to assign random port in Kubernetes Cluster if we want to run random replica?
  • Why use kubernetes?
    • Ans:
      • It is deep link with Google Cloud.
      • Easy to integrate with Google Cloud Service.

3. 認識Dataflow by Simon Su/Cloud Architect at LinkerNetworks

The Dataflow Model: A Practical Approach to Balancing Correctness, Latency, and Cost in Massive-Scale, Unbounded, Out-of-Order Data Processing - 中文論文讀後心得

可惜最後沒聽完…..

[Kubernetes] 透過 Kubernetes 1.4 新功能 Kubeadm 來建立 Kubernetes Cluster

緣起

2016/09/26 Google 推出了新版的 Kubernetes 1.4 裡頭最讓人期待的,就是 kubeadm 這個新的功能.

本來很期待他能夠讓 Kubernetes 變得更容易安裝並且加入新的節點,所以就試玩了一下.發現功能都還蠻強大的.不僅僅是變得更容易安裝,其實根本就是跟 docker swarm mode 致敬啊.整個變得簡單到不行.

建立機器

這邊只建議兩個 OS 版本:

  • Ubuntu 16.04
  • CentOS 7

備註: 如果你使用 docker-machine 來建立 VM 獲釋 GCP 上面的機器,預設的 Ubuntu 是 15.10 ,是無法順利安裝完畢的.

下載相關的 binary

每一台電腦(包括 Master 跟 Node 都得執行)所有的指令都是透過 sudo su -

# curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt-get update
# apt-get install -y docker.io kubelet kubeadm kubectl kubernetes-cni

啟動 Master

就像是 docker swarm mode 的 master 一樣,只要一行指令就好.

kubeadm init

詳細會出現的螢幕如下

# kubeadm init
<master/tokens> generated token: "306d01.da88f33b20103873"
<master/pki> created keys and certificates in "/etc/kubernetes/pki"
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
<util/kubeconfig> created "/etc/kubernetes/admin.conf"
<master/apiclient> created API client configuration
<master/apiclient> created API client, waiting for the control plane to become ready
<master/apiclient> all control plane components are healthy after 51.538064 seconds
<master/apiclient> waiting for at least one node to register and become ready
<master/apiclient> first node is ready after 0.504944 seconds
<master/discovery> created essential addon: kube-discovery, waiting for it to become ready
<master/discovery> kube-discovery is ready after 13.506671 seconds
<master/addons> created essential addon: kube-proxy
<master/addons> created essential addon: kube-dns
Kubernetes master initialised successfully!
You can now join any number of machines by running the following on each node:
kubeadm join --token 306d01.da88f33b20103873 10.240.0.11

備註: 當出現 waiting for at least one node to register and become ready 需要大概幾十秒鐘(取決你機器的速度).

其他機器只要透過 kubeadm join --token 306d01.da88f33b20103873 10.240.0.11 就可以了.

Node 加入該群集 (Clustering)

kubeadm join --token 306d01.da88f33b20103873 10.240.0.11

詳細指令顯示如下:

# kubeadm join --token 306d01.da88f33b20103873 10.240.0.11
<util/tokens> validating provided token
<node/discovery> created cluster info discovery client, requesting info from "http://10.240.0.11:9898/cluster-info/v1/?token-id=306d01"
<node/discovery> cluster info object received, verifying signature using given token
<node/discovery> cluster info signature and contents are valid, will use API endpoints [https://10.240.0.11:443]
<node/csr> created API client to obtain unique certificate for this node, generating keys and certificate signing request
<node/csr> received signed certificate from the API server, generating kubelet configuration
<util/kubeconfig> created "/etc/kubernetes/kubelet.conf"
Node join complete:
* Certificate signing request sent to master and response
  received.
* Kubelet informed of new secure connection details.
Run 'kubectl get nodes' on the master to see this machine join.

驗證 Kubernetes 叢集有成功建立

# kubectl get nodes
NAME               STATUS    AGE
evan-kube-1        Ready     1m
evan-kube-2        Ready     1m
evan-kube-master   Ready     4m

建立 Clustering 的 network

# kubectl apply -f https://git.io/weave-kube
daemonset "weave-net" created

跑一些簡單的範例吧

透過 Console 直接建立兩個 Pods ,以下指令需要在 Master 輸入.

# kubectl get nodes
NAME               STATUS    AGE
evan-kube-1        Ready     1m
evan-kube-2        Ready     1m
evan-kube-master   Ready     4m
root@evan-kube-master:~# cat <<EOF | kubectl create -f -
> apiVersion: v1
> kind: Pod
> metadata:
>   name: busybox-sleep
> spec:
>   containers:
>   - name: busybox
>     image: busybox
>     args:
>     - sleep
>     - "1000000"
> ---
> apiVersion: v1
> kind: Pod
> metadata:
>   name: busybox-sleep-less
> spec:
>   containers:
>   - name: busybox
>     image: busybox
>     args:
>     - sleep
>     - "1000"
> EOF
pod "busybox-sleep" created
pod "busybox-sleep-less" created

確認一下 Pod 有建立成功

# kubectl get pods
NAME                 READY     STATUS    RESTARTS   AGE
busybox-sleep        1/1       Running   0          6s
busybox-sleep-less   1/1       Running   0          6s

確認一下每個 Pod 在哪個節點執行 ?

# kubectl describe pod busybox-sleep
Name:           busybox-sleep
Namespace:      default
Node:           evan-kube-2/10.240.0.14
...

這樣就可以知道 pod busybox-sleepevan-kube-2 這台機器.

再來確認另外一個 pod busybox-sleep-less 在哪個節點執行 ?

# kubectl describe pod busybox-sleep-less
Name:           busybox-sleep-less
Namespace:      default
Node:           evan-kube-1/10.240.0.13

這樣就可以知道 pod busybox-sleep-lessevan-kube-1 這台機器.

限制 (Limitations)

  • 目前 kubeadm 還不支援 cloud-provider integrations, 所以如果需要 Load Balancers (LBs) 或是 Persistent Volumes (PVs) .還是建議使用 GKE
  • 這樣建立的叢集只有一個 Master ,並且上面的 etcd 只有一個,如果需要備援或是要做 HA 就建議透過 etcd clustering 來做.
  • 目前 kubectl logs 還不支援 kubeadm 建立出的叢集,請看 issue 22770.