測試為什么要學習容器技術及k8s
k8s不是運維的專屬技術
隨着互聯網技術的發展,架構也已經從單體架構發展到容器雲( “微服務 + k8s” 完美結合)
很多人認為,k8s只是運維需要掌握的技術,講真,測試和運維、開發都有技術交集
所以,作為測試,也要跟上技術發展的節奏,與時俱進,技多不壓身,大家也可以看看招聘要求,容器技術及k8s是加分項
掌握這些熱門技術,妥妥提升競爭力,抓住熱門技術的紅利期,就能快速加薪
相對於代碼來說,學k8s簡單多了,也很快
下面簡單介紹下為什么要學習容器技術及k8s。
為什么要學習docker?
可以編寫dockerfile,制作鏡像 快速驗證鏡像是否ok(docker run) 輕松快捷部署一個學習環境,比如mysql,tomcat
為什么要學習k8s?
1、使用k8s的時候,docker被封裝在k8s里面,對docker操作很少
docker是一種容器技術,非k8s組件 docker最小操作單元是容器 k8s最小操作單元是pod
2、不管是功能測試還是其它測試,查看日志需要會k8s基礎操作,好比你看linux服務器上日志,需要linux基礎一樣
3、性能監控分析需要
1、node和linux整體監控一樣的,https://www.cnblogs.com/uncleyong/p/15398198.html 2、因為k8s的pod是根據算法調度的,所以你去看這個node上有哪些pod,Kubectl get po -owide | grep k8s-worker01 3、結合微服務鏈路監控工具,https://www.cnblogs.com/uncleyong/p/15535852.html 4、可以進入容器,kubectl exec -it podname -- sh,有top、vmstat常用命令,java項目,你也可以jstack打棧,也可以使用arthas,https://www.cnblogs.com/uncleyong/p/14944401.htm
node(no)
詳見:https://www.cnblogs.com/uncleyong/p/15789144.html
名稱空間(ns)
詳見:https://www.cnblogs.com/uncleyong/p/15610985.html
標簽(label)
詳見:https://www.cnblogs.com/uncleyong/p/15704528.html
核心資源:資源調度(Pod、RC、RCS、Deployment、Daemonset、Statefulset)
Pod
簡介
Pod是一組緊密關聯的容器集合,支持多個容器在一個Pod中共享網絡和文件系統,可以通過進程間通信和文件共享這種簡單高效的方式完成服務,是Kubernetes調度的基本單位。
Pod的設計理念是每個Pod都有一個唯一的IP。
Pod具有如下特征:
包含多個共享IPC、Network和UTC namespace的容器,可直接通過localhost通信 所有Pod內容器都可以訪問共享的Volume,可以訪問共享數據 優雅終止:Pod刪除的時候先給其內的進程發送SIGTERM,等待一段時間(grace period)后才強制停止依然還在運行的進程 特權容器(通過SecurityContext配置)具有改變系統配置的權限(在網絡插件中大量應用) 支持三種重啟策略(restartPolicy),分別是:Always、OnFailure、Never 支持三種鏡像拉取策略(imagePullPolicy),分別是:Always、Never、IfNotPresent 資源限制,Kubernetes通過CGroup限制容器的CPU以及內存等資源,可以設置request以及limit值 健康檢查,提供兩種健康檢查探針,分別是livenessProbe和redinessProbe,前者用於探測容器是否存活,如果探測失敗,則根據重啟策略進行重啟操作,后者用於檢查容器狀態是否正常,如果檢查容器狀態不正常,則請求不會到達該Pod Init container在所有容器運行之前執行,常用來初始化配置 容器生命周期鈎子函數,用於監聽容器生命周期的特定事件,並在事件發生時執行已注冊的回調函數,支持兩種鈎子函數:postStart和preStop,前者是在容器啟動后執行,后者是在容器停止前執行
【bak】pod資源清單詳解:https://www.cnblogs.com/uncleyong/p/15611327.html
創建方式
參考:https://www.cnblogs.com/uncleyong/p/15571059.html
【bak】pod資源清單詳解:https://www.cnblogs.com/uncleyong/p/15611327.html
RC & RCS
Replication Controller(簡稱RC,副本控制器)可確保Pod副本數達到期望值,也就是RC定義的數量。換句話說,Replication Controller可確保一個Pod或一組同類Pod總是可用。
RCS主要用作Deployment協調創建、刪除和更新Pod,和Replication Controller唯一的區別是,ReplicaSet支持標簽選擇器
二者很少單獨被使用,都是使用更高級的資源Deployment、DaemonSet、StatefulSet來管理Pod。
Deployment、Daemonset、Statefulset
參考:https://www.cnblogs.com/uncleyong/p/15704741.html
核心資源:配置管理(ConfigMap、Secret)
詳見:https://www.cnblogs.com/uncleyong/p/15704534.html
核心資源:服務發布(Service、Ingress)
詳見:https://www.cnblogs.com/uncleyong/p/15704537.html
Ingress-nginx的官方文檔:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#rewrite
Ingress-nginx Github:https://github.com/kubernetes/ingress-nginx
高級調度
污點(Taint)、容忍度(Toleration)
初始化容器(InitContainer)
node親和性
pod親和性
拓撲域(Topology),比如實現多地多機房部署
臨時容器
計划任務(CronJob)
存儲
詳見:https://www.cnblogs.com/uncleyong/p/15704766.html
volumes:存儲卷
EmptyDir實現數據共享
HostPath掛載宿主機路徑
掛載NFS至容器
持久化存儲(PV、PVC)
presistentvolume:pv,持久化存儲卷
storageclass:動態存儲
權限管理:rbac
Role-Based Access Control,中文全稱:基於角色的權限訪問控制
資源配額:Resource Quotas
詳見:https://www.cnblogs.com/uncleyong/p/15704767.html
中間件部署
redis等
包管理工具
helm
operator
運維、devops
日志收集
監控
ci/cd
附1:k8s資源yaml示例
k8s核心資源:精簡版yaml示例,https://www.cnblogs.com/uncleyong/p/15571059.html
bak:https://www.cnblogs.com/uncleyong/p/15488243.html
附2:k8s常用鏡像
k8s常用鏡像:https://www.cnblogs.com/uncleyong/p/15552783.html