Alan's BLOG
  • archives
  • posts
  • tags
  • about
  • quote
  • search
Home

Posts

Kubernetes Pod:Overview

Kubernetes是現代應用程序開發和部署的重要技術,而Pod是Kubernetes中最小的部署單位。Pod是一個或多個container的集合,它們共享一個網路命名空間和一個網路接口。Pod不僅提供了一個簡單而強大的container環境,還可以用於實現多種container編排方案,例如負載平衡、數據管理、多container協作等。 本文將深入探討Kubernetes中的Pod,介紹Pod的基本概念、設計原則和實現方式,以及與其他資源的關係。您將學習如何創建和配置Pod,如何使用Kubernetes管理Pod,以及如何通過Pod實現高效、彈性和可靠的應用程序部署。 什麼是Kubernetes Pod Kubernetes Pod是Kubernetes集群中最小的部署單位。一個Pod可以包含一個或多個container,這些container共享相同的網路和儲存空間。Pod提供了一個環境,讓container可以協同工作,形成一個應用程序。 Pod的結構和特性 Pod包含以下元素: 共享網路空間 (Networking):Pod 中的所有container共享相同的網路空間,可以在container之間通過 localhost 進行通信。 共享儲存空間 (Shared Storage):Pod 中的所有container共享相同的儲存空間,可以在container之間共享文件、環境變量等。 容器 (Containers):Pod 中可以包含一個或多個container,這些container可以共享同一個網路和儲存空間,方便container之間的互相協作。 存活和重啟策略 (Liveness and Restart Policy):Pod 的存活策略指定了在容器出現異常情況時,Kubernetes 如何應對,如重新啟動 container 或者將其標記為失敗。Pod 的重啟策略則指定了當 Pod 中的所有 container 都停止運行時,Kubernetes 如何進行重啟。 元數據 (Metadata):Pod 中包含一些元數據,如 Pod 名稱、命名空間、標籤等,這些元數據可以用於管理和監控 Pod。 Pod的特性包括: 生命週期短暫 可以擁有多個container 具有唯一的IP地址 具有獨立的儲存空間 具有網路隔離 如何創建和管理Pod 要創建 Kubernetes Pod,可以使用以下兩種方式: 宣告式(Declarative):使用 YAML 或 JSON 格式的文件來定義 Pod 的結構、元資料和規格,包括 Pod 名稱、container image、資源限制、網路設定等。 apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: nginx-container image: nginx:latest ports: - containerPort: 80 接著使用kubectl創建pod...

2023-03-01 · 2 min · 365 words · Alan

閱讀筆記:5 ChatGPT features to boost your daily work

標題:5 ChatGPT features to boost your daily work 連結:5 ChatGPT features to boost your daily work | by Josep Ferrer | Geek Culture | Jan, 2023 | Medium 機器學習技術正逐漸地應用到日常工作之中,ChatGPT 便是其中之一。ChatGPT 是由 OpenAI 訓練的一個大型語言模型,它能夠根據輸入的文字,生成各種形式的回應,包括文字、代碼和語言翻譯等。 在這篇文章中,作者將介紹 ChatGPT 的五個強大功能,這些功能可以幫助開發者提高工作效率和生產力。 產生語言框架:ChatGPT 可以生成編碼框架,幫助開發人員更快速地開始編碼。 研究和比較:ChatGPT 可以幫助使用者對不同主題進行研究和比較,包括比較產品、服務、技術、公司等等。 理解代碼:ChatGPT 可以分析並幫助使用者理解代碼,包括程式語言、代碼段和概念等。 為代碼添加註釋:ChatGPT 可以根據輸入的代碼,產生相應的註釋,幫助使用者更輕鬆地理解代碼和更有效地與團隊成員協作。 使用特定風格重寫代碼:ChatGPT 可以根據輸入的代碼,重寫代碼並生成相應的代碼風格,以滿足不同的編碼標準和最佳實踐。

2023-02-20 · 1 min · 46 words · Alan

ansible k8s

Intro👨‍💻 在gcp環境下使用ansible playbook 建立k8s cluster,目前base image為centos 7,安裝方式類似elk stack,一樣先等master安裝完後產生token,接著安裝slave。 使用的CRI為containerd,CNI為calico 資料夾結構 . ├── README.md ├── create_k8s_master_instance.yaml ├── create_k8s_slave_instance.yaml ├── files │ ├── instance │ └── k8s ├── group_vars │ └── all ├── inventory │ └── k8s.cluster.host ├── inventory.instance.create.yml.example ├── k8s-setup.sh ├── roles │ ├── instance │ ├── k8s │ ├── monitor │ └── ops_agent └── vars ├── instance ├── k8s └── monitor 使用指南 設定機器資訊:複製好inventory.instance.create.yml.example後,可參考inventory裡的設定,主要設定gcp的資訊, 設定group_vars的env.yml,改成自己的gcp的專案以及要設定的region 可使用k8s-setup.sh進行一鍵安裝 sh ./k8s-setup.sh 建置流程 k8s_master -> k8s_slave...

2023-02-14 · 1 min · 110 words · Alan

閱讀筆記:15 Best Practices when working with Docker

標題:15 Best Practices when working with Docker 連結:15 Best Practices when working with Docker | by Ali Zeynalli | Dec, 2022 | Medium 本篇文章作者根據經驗以及自身研究整理出了15個使用Docker的技巧與提示 1. 進行中的工作不應保存在未命名、已停止的容器中 如果進行中的工作保存在不好的容器中,可能會導致資料丟失、風險以及安全問題、不利於協作 2. 定期清理Image 幫助釋放存儲空間,優化Docker引擎性能,減少安全風險,以及維持主機整潔,易於管理。 3. 使用授權的相依套件 可以帶來更好的合法性、安全性、可靠性、支持性和法律責任。 4. 將變化很大的部分放在 DockerFile 的末尾 因為Docker會將每個步驟緩存為一個單獨的容器,重複的操作將不會重新執行,將變化較大的部分放在最後可提高性能 5. 不要在容器啟動時就獲取相依套件 避免在容器啟動時獲取依賴包帶來的問題,並提高容器的啟動速度和可管理性。最佳實踐是在構建Image時就獲取依賴包,並將它們打包到Image中。另外,還可以使用多階段構建和緩存等技術來優化構建過程,提高構建速度和效率。 6. 不要掛載共享資料夾 有助於提高容器的可移植性、安全性、可重現性和可管理性。 7. 保持Image simple and small 可以提高應用程序的可移植性、降低安全風險、減少Image大小、提高Image構建和管理效率。 8. 從頭開始構建 最大限度地減少相依 9. Tag Image 使用合理的Tag,有助於對Image進行排序 10. 使用小型基礎Image 例如-slim或-alpine,可以帶來更明確的依賴項、更少的儲存、更少的安全漏洞和攻擊面以及更快的構建時間。 11. 使用官方Image 帶來可靠性、安全性、活躍的社群支持以及易用性等好處。 12. 創建臨時容器 Dockerfile定義的Image應該盡可能是臨時的,提供隔離環境、避免依賴衝突、快速清理、易於重複,提高工作效率與可靠性,方便快速測試,不必擔心對主機有影響。 13. 使用multi-stage構建 幫助減小Docker Image的大小,優化構建速度,簡化構建過程,以及提高Docker Image的安全性。...

2023-02-14 · 1 min · 77 words · Alan

Linux 定時任務[crontab]

👨‍💻簡介 什麼是crontab Crontab 是一個 Unix 系統下的定時任務管理工具。它允許用戶自動在特定時間執行指令或程式,而無需人工干預。Crontab 文件中的每一行都代表一個定時任務,其中指定了任務執行的時間,以及要執行的指令或程式。 crontab用在哪 適用於週期性的任務,例如每天定時備份檔案,或者每周定時發送報表等等。使用 Crontab 可以大大簡化這些任務的管理,避免因人為錯誤而導致的問題。 語法 crontab [ -e [UserName] | -l [UserName] | -r [UserName] | -v [UserName] | File ] 選項 參數 說明 -e UserName 編輯crontab -l UserName 顯示當前用戶的crontab -r UserName 移除當前用戶的crontab -v UserName 顯示當前用戶的cron jobs狀態 格式 # ┌───────────── 分鐘 (0 - 59) # │ ┌─────────── 小時 (0 - 23) # │ │ ┌───────── 日 (1 - 31) # │ │ │ ┌─────── 月 (1 - 12) # │ │ │ │ ┌───── 星期幾 (0 - 7,0 是週日,6 是週六,7 也是週日) # │ │ │ │ │ # * * * * * /path/to/command 範例 查看自己的crontab crontab -l 查看指定用戶的crontab sudo crontab -u alan -l 編輯crontab crontab -e 編輯指定用戶的crontab sudo crontab -u alan -e 刪除crontab crontab -r 擴展 參數 說明 crontab格式 @reboot 每次重開機執行一次 @yearly 每年執行一次 0 0 1 1 * @annualy 每年執行一次 0 0 1 1 * @monthly 每月執行一次 0 0 1 * * @weekly 每週執行一次 0 0 * * 0 @daily 每天執行一次 0 0 * * * @hourly 每小時執行一次 0 * * * * 限制特定用戶執行crontab 使用場景:系統安全性考量 使用到的檔案 /etc/cron....

2023-02-09 · 2 min · 217 words · Alan

gcp遠端連線的幾種方式

Intro🧑‍💻 紀錄有哪些方式可以ssh到gce機器 放key到中繼資料 Compute Enging -> 中繼資料 -> 安全殼層金鑰 使用TCP Tunneling gcloud compute start-iap-tunnel --project project-id --zone vm-zone --local-host-port 127.0.0.1:10001 vm-host 22 使用gcloud ssh gcloud compute ssh --zone vm-zone vm-host --tunnel-through-iap --project project-id 可編寫tunnel的script ## dev gcloud compute start-iap-tunnel dev-border 22 --local-host-port 127.0.0.1:10120 --zone asia-east1-b --project gcp-project & ## test gcloud compute start-iap-tunnel test-border 22 --local-host-port localhost:10121 --zone asia-east1-b --project gcp-project & ## prod gcloud compute start-iap-tunnel prod-border 22 --zone asia-east1-b --local-host-port 127....

2023-02-09 · 1 min · 100 words · Alan

terraform-ansible

簡介👩‍💻 最近在研究terraform與ansible的整合,不過還在摸索中,機器的版控對於維運來講相對重要,這時候有terraform的出現,在建立機器後會隨之產生機器的狀態檔,而ansible則是在建立好機器後幫助我完成我所需的機器相關設定 這是一款terraform結合ansible的小玩具,在gcp環境下使用terraform幫我建置好機器,接著使用local exec執行ansible的playbook完成機器的設定 資料夾結構 ├───ansible-playbook │ ├───group_vars │ │ └───all │ ├───roles │ │ ├───instance │ │ │ └───tasks │ │ └───ops_agent │ │ └───tasks │ └───vars │ └───instance ├───modules │ └───main.tf │ └───variables.tf └───roles └───general └───general.tf ansible-playbook:放置ansible相關工具 modules:放置主要使用的resource以及定義好的變數 roles:放置自定義參數 使用指南 先建立gcp sa給terraform可以有建立vm的權限,接著可以下 terraform init -> 先讓terraform下載相關的repo terraform plan -> 查看terraform會做哪些事情,一開始都會先去檢查狀態檔,最上面代表動作,此範例為create,最下面的plan代表總共有4個resource會add terraform apply -> 建立機器指令,apply一樣會把plan的部分也顯示出來,並詢問是否要繼續,打上yes後便會開始建置機器 terraform destroy -> 機器建立完要刪除時下這指令,destroy一樣會去檢查狀態檔,這次的動作為destroy,最下面的plan顯示4個資源會被destroy terraform show -> 可以顯示當前terraform的狀態 🔗專案repo –> https://github.com/sz9751210/terraform-demo

2023-01-23 · 1 min · 67 words · Alan

Centos 7 安裝gitlab

安裝與設定所需依賴 安裝依賴套件 sudo yum install -y curl policycoreutils-python openssh-server perl 啟動 SSH 服務 sudo systemctl enable sshd sudo systemctl start sshd 防火牆開啟網頁要用的PORT網頁 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo systemctl reload firewalld 安裝 SMTP Server (Postfix),發送通知email用 sudo yum install postfix sudo systemctl enable postfix sudo systemctl start postfix 添加gitlab repo以及安裝package Add Gitlab package 可自行選擇要安裝CE版還是EE版,如果要安裝EE版則把gitlab-ce改成gitlab-ee即可 curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash Install Gitlab 這邊建置是使用內網,因此使用http的方式下去做設定 sudo EXTERNAL_URL="http://{{ internal_ip }}" yum install -y gitlab-ce reference Download and install GitLab | GitLab

2023-01-23 · 1 min · 79 words · Alan

Gitlab 修改密碼

使用Rake task 將user_name改成要變更密碼的user name即可 sudo gitlab-rake "gitlab:password:reset[user_name]" 使用Rails console 開啟rails console sudo gitlab-rails console 取得user 透過username user = User.find_by_username 'user_name' 透過userID user = User.find(uid) 透過email user = User.find_by(email: 'user@example.com') 重置密碼 new_password = 'my_new_password' user.password = new_password user.password_confirmation = new_password 儲存修改 user.save! 退出console exit

2023-01-23 · 1 min · 43 words · Alan

leetcode 26. Remove Duplicates from Sorted Array

題目描述 將一個已經排序好的list中重複的數字刪去,並回傳list長度,必須以in-place的方式處理,不能使用額外的空間 解題思路 使用兩個指針,一個紀錄都沒重複的次數(slow),一個紀錄當前沒重複的數字(fast),如果重複,則更新沒重複的數字 Python class Solution: def removeDuplicates(self, nums: List[int]) -> int: n = len(nums) if n < 2: return n slow, fast = 1, 1 for fast in range(1,n): if nums[fast-1] != nums[fast]: nums[slow] = nums[fast] slow += 1 return slow Golang func removeDuplicates(nums []int) int { n := len(nums) if n < 2 { return n } slow, fast := 1, 1 for fast < n { if nums[fast-1] !...

2022-12-17 · 1 min · 85 words · Alan
« Prev  Next  »
© 2024 艾倫的程式之旅 Powered by Hugo & PaperMod