第 43 期 - 把握夏天的尾巴,曬太陽曬到烤焦

本週專欄

從 Github 開源指南|學習如何貢獻開源專案

本週我們來讀一下「如何為開源做貢獻」。這份文件是 Github 的 Open Source Guide 開源指南,約莫兩年前剛出的時候全部是英文版的,已經三年了,拖到現在才讀(汗)。

前端開發

The Boring React State Management Guide

標題雖然看起來很無聊,但內文一點也不!文章用許多實際的例子告訴你該如何正確的管理 React 的 State,值得一讀!

被低估的CSS滤镜:drop-shadow

相當有趣的 CSS 屬性,之前如果需要陰影就會馬上去找 box-shadow 來使用,但現在又多了一個很棒的選擇囉!

21 Awesome DEV portfolios for your inspiration

每個前端工程師都會想要擁有一個屬於自己的網站,但是卻永遠都少了那麼一點靈感,告訴你這篇文一次就 21 個最讚的作品集通通送給你,讓靈感整個滿出來。

Git 版本控制

為你自己學 Git

雖然之前好像已經推薦過了,但說到 Git 還是得推一下龍哥的「為你自己學 Git」,雖然某一些章節需要付費才能解鎖,不過即便不付費也還是可以把 Git 的基本概念學好,很推薦對於 Git 的原理不太熟悉的新手讀

9 useful tricks of git branch you might not know

如果你用 Git 已經好一陣子了,想學一些跟 git branch 有關的小技巧,譬如說快速切換到最近有新 commit 的 branch、列出已經被 merge 的 branch 等等,那可以看看這篇(不推薦入門 Git 的初學者看,可能會越看越亂)

7 Amazing Git Extensions for VS Code

如果你很常用 Git 而且剛好也有在用 VSCode,這邊有幾個超神的 extension 要推薦給你~文中推薦的 Git History、Git Blame 還有 GitLens 我都有在用,沒有他們真的不知道怎麼寫扣 XD

這篇文是發佈在 Medium 付費牆上,看不到的人可以試試 medium unlimited 這個瀏覽器插件,Chome 跟 Firefox 都有哦

Ruby 語言

What Makes Ruby Beautiful: Metaprogramming

是什麼讓 Ruby 變得那麼美:Metaprogramming。如果我要向一個五歲的小孩解釋 Meta Programming 是什麼?假設你想要畫一個陽光燦爛的城市,你用筆在紙上寫下「陽光燦爛的城市」,然後魔術就發生了。

Rake::Task .enhance() Method Explained

解釋 Rake::Task 中的 .enhance() 方法。Molly Struve 在貢獻 forum software 開源專案的時候,遇到了一個執行順序不固定的 bug,於是她去從 Rake::Task 中,發現了 .enhance 方法,成功了解決了這個 Bug,可喜可賀!

Ruby Literals

Ruby 的文字值,基本資料型態,例如:200 + 2_00 會等於 400,這是 Ruby 中的特殊寫法。% 在 Ruby 中的的使用。一些語言的基本,越熟悉閱讀的時候就不需要不斷查找。

DevOps

What’s new in Kubernetes 1.19?

這次 1.19 的 34 個更新中,有 10 個是全新推出的功能, 8 個從 Beta 變成 Stable,2 個 K8S 專案的管理變更,其他 14 個則是既有功能的持續改善,依照慣例,讓我們來看看這次的重點更新:

  • 支援的時間週期將從 9 個月延長到 12 個月:隨著 K8S 專案越發穩定,而且根據調查結果,很多使用者都無法在 9 個月內升級,有將近 1/3 的使用者都還在使用已經沒有支援的版本,因此 LTS 團隊決定將本來 9 個月支援時間延長到 12 個月,讓大家多 3 個月的時間可以喘息一下

  • Deprecated API 的警告機制:從現在起 API Server 將會包含一個 Deprecated 相關資訊的警告 Header,告知 Client 這個 API 什麼時候會進入 Deprecated,什麼時候會真的被移除掉,有興趣的人可以使用最新版的 kubectl 就可以看到相關警告訊息

  • Beta 功能的存亡生死戰:以前一個功能進到 Beta 階段之後,就會被預設開啟,讓使用者可以使用,但這也造成此功能朝向更穩定的開發動力逐漸地消失掉,導致他可能在 Beta 停留的時間太久,例如 Ingress,所以以後假如一個功能進到 Beta 之後在 9 個月內就會被 Deprecated,除非 1) 他達成 GA 的條件變成 Stable,或是 2) 有準備好新的 Beta 版本,並且將舊的 Beta 版本淘汰掉

  • 通用的短暫型儲存空間:有數種方式可以讓開發者定義短暫型的儲存空間,但是對於 K8S 支援的短暫型儲存空間 (例如:EmptyDir, Secrets, ConfigMap),其功能也被限縮在 K8S 內,假如要讓特定的 CSI 也支援的話,那就還要去更新此 CSI Driver 才可以;所以此新功能提供了一個簡單的 API 讓任何的 Storage Driver 都可以直接動態來使用

  • 讓 kubeadm 使用客製化的 Patch:不同的環境 (Dev, Test, Prod) 會有不同的組態設定是一件再正常不過的事情了,所以現在 kubeadm 工具提供了一個 flag –experimental-patches (從 –experimental-kustomize 複製過來,以後會變成 –patches),讓使用者可以根據不同的環境使用不同的組態設定檔案

Announcing Snyk’s developer-first Infrastructure as Code security capabilities

現在開發者有越來越多的機會使用 Code/Configuration 去定義資源,例如 Docker, KubernetesTerraform …等,所以 Snyk 平台現在推出 Security 掃描功能,底下範例是從 GitHub 匯入的 Terraform Module,透過 Synk 掃描之後,馬上就發現他並沒有通過 CIS 要求,而且應該要修正的地方會很清楚的被標示出來,讓開發者方便把問題修復掉,目前先支援 Docker, Kubernets 和 Terraform 管理 AWS 的部分,看來 IaC 的 Security 市場有越來越多人開始進來搶攻了!

Graceful shutdown and zero downtime deployments in Kubernetes

建立/刪除 Deployment,其實牽扯到的操作都是 Pod,在建立 Pod 的時候,其實是循序漸進地把許多步驟一個一個完成 (Scheduler 分配 Pod 要去哪一個 Node,Kubelet 透過 CRI, CNI, CSI 的幫忙把 Pod 建立完畢,最後 Control Plane 再將 Pod IP 更新到 Endpoint 內),其實只要有把 Readiness Probe 設定得當應該就不會遇到什麼大問題,不過再將 Pod 刪除的時候,把 Pod 砍掉跟把 IP 從 Endpoint 移除掉是同時發生的,假如 Pod 先被砍掉了,但是 IP 還在 Endpoint 內的話,還在運作或是服務中的請求就會收到影響,所以這邊會分成兩種型態來說明要怎麼讓 Pod 優雅的死掉

  • General Pod: 解法當然就是讓 Pod 等一下再死,等到 IP 不存在於 Endpoint 時再死,K8S 預設會等待 30 秒才把 Process 砍掉,除非特別修改 terminationGracePeriodSeconds 在 Pod 中的預設值,也可以透過 preStop Hook 來延長被砍掉的時間,透過這些設定等到 Pod IP 被從 Endpoint 被移除掉之後再開始進行被砍掉的步驟,如此一來既有的服務請求就可以安心完成不會被影響到

  • Long-Running Pod: 但假如 Pod 要處理幾小時的影片轉檔,或是像 Websocket 這種類型的 Workload,就會建議使用 Rainbow Deployment 的方式,每次的部屬是建立新的 K8S Deployment,舊的 Deployment 繼續服務/運行既有的請求,新的 Deployment 就負責新的請求/任務;舊的 Deployment 等到沒有人用的時候再手動砍掉,或是自動砍掉 (Osiris 這個開源專案就是想要達成這個需求)

Critical Jenkins Server Vulnerability Could Leak Sensitive Information

有在使用 Jenkins 的組織最近記得更新,因為根據最近揭露的 CVE-2019-17638 (CVSS 標記為 9.4 分) 顯示,Jenkins 使用到的 Eclipse Jetty 從版本 9.4.27.v20200227 到 9.4.29.v20200521 都有受到影響,可以讓未經授權的駭客擅自從 HTTP 回應中取得其他使用者的機敏資訊;Jetty 本身已經在上個月釋出更新版本 9.4.30.v20200611,Jenkins 昨天也隨著發佈了 2.243 還有 LTS 版本 2.235.5,大家趕緊看看自己的版本有沒有更新到此版

StarBugs Weekly

StarBugs Weekly 由一群不寫文章就會想要亂花錢,但是又沒有那麼多錢,只好繼續寫文章的開發者所創立。
內容包含 Web 前端、中端、後端、DevOps、產品開發、精實創業,一切跟產品有關的知識,都是我們的守備範圍!

Curators:

  • @GQSM - Hi!我是神 Q 超人,一個先衝再說的男人。
  • @Larry850806 - 我是 Larry,傳說中的 0.1 倍工程師!
  • @LukaTW - 一名全身都是死角的工程師。
  • @smalltown - 熱愛鑽研各種可以提升雲端服務品質及增進團隊開發效率的開源技術

Feedback

本週呈現主題方式做了一些改變,希望讓讀者能夠更快速精準的找到自己要的資訊。也加入社群活動這個區塊,每週更新社群活動的資訊。如果有任何建議,歡迎私訊 星巴哥技術週刊 FB 粉絲專頁 與我們聯繫。