K8S學習(1)——K8S的基本概念

在這裏插入圖片描述

一、基本概念

1、Kubernetes Master:K8S的主節點,對整個集羣的節點進行管理,通過主服務器向其它節點發送如創建容器、自動部署、自動發佈等。所有外部數據由master進行接受並進行分配
2、Node:節點,是k8s集羣中相對於Master而言的工作主機。Node可以是一臺物理主機,也可以是一臺虛擬機(VM)。
3、Pod:k8s系統中可以創建和管理的最小單元,是資源對象模型中由用戶創建或部署的最小資源對象模型
在這裏插入圖片描述

  • Pod是“容器”的容器,可以包含多個"Container"
  • Pod是K8S最小可部署單元,一個Pod就是一個進程
  • Pod內部容器網絡互通,每個Pod都有自己獨立虛擬IP
  • Pod都是部署完整的應用或者模塊(可以根據項目特性、資源的多寡分配一個Pod中部署一個完整的應用還是隻部署其中一個模塊)
  • Pause:是Pod中必備的最基礎的一個容器,主要作用:
    1. 用來提供一個共享的網絡空間,多個容器之間可以直接用localhost,通過不同的端口訪問
    2. 提供一個共享的Volume(數據卷),將數據放到Pause中,通過卷的方式掛載到其它容器中,數據被Pause統一管理

4、service:服務,將多個不同主機間的Pod互聯互通
5、label:標籤,相當於Pod的別名。主節點通過label找到節點進行相應操作
6、Replication Controller:複製控制器,在主節點上,用來對Pod的數量進行監控,當Pod少的時候會自動創建一個Pod,如果有Pod無響應,會自動停掉並重新啓動一個

二、相應的應用程序

沒一個節點必須要有三個應用程序:docker、kubelet、kube-proxy,後兩個在K8S安裝好後就存在。

  1. kubelet:用來執行K8S相關的命令
    參數items:
    
        --address ip                                              kubelet 服務監聽的IP地址(設置爲 0.0.0.0 監聽所有地址)(默認 0.0.0.0 )
        --allow-privileged                                        如果爲 true ,將允許容器請求特權模式
        --anonymous-auth                                          允許匿名請求到 kubelet 服務。未被另一個身份驗證方法拒絕的請求被視爲匿名請求。匿名請求包含系統的用戶名: anonymous ,以及系統的組名: unauthenticated 。(默認 true )
        --authentication-token-webhook                            使用 TokenReview API 來確定不記名令牌的身份驗證
        --authentication-token-webhook-cache-ttl duration         webhook 令牌身份驗證器緩存響應時間。(默認2m0s)
        --authorization-mode string                               kubelet 服務的授權模式。有效的選項是 AlwaysAllow 或 Webhook 。Webhook 模式使用 SubjectAccessReview API 來確定授權。(默認“AlwaysAllow”)
        --authorization-webhook-cache-authorized-ttl duration     來自 webhook 的已認證響應緩存時間(默認 5m0s)
        --authorization-webhook-cache-unauthorized-ttl duration   來自 webhook 的未認證響應緩存時間(默認 30s)
        --azure-container-registry-config string                  Azure 容器註冊表配置信息路徑
        --bootstrap-kubeconfig string                             用於獲取 kubelet 客戶端證書的 kubeconfig 文件路徑,如果由 --kubeconfig 指定的文件不存在,將使用 bootstrap kubeconfig 從 API 服務器請求一個客戶端證書,成功後,引用生成證書文件和密鑰的 kubeconfig 將被寫入 --kubeconfig 指定的文件,客戶端證書和密鑰將被保存在 --cert-dir 指定的目錄。
        --cadvisor-port int32                                     本地 cAdvisor 端口(默認 4194)
        --cert-dir string                                         TLS 證書所在目錄。如果 --tls-cert-file 和 --tls-private-key-file 指定的文件存在,當前配置將被忽略。(默認“/var/run/kubernetes”)
        --cgroup-driver string                                    kubelet 用來操作主機上的 cgroups 驅動,可選值有:“cgroupfs”和“systemd”(默認“cgroupfs”)
        --cgroup-root string                                      用於 pods 的可選根 cgroup,這是由容器運行時在最好的工作基礎上處理的,默認:'',也就是使>用容器運行時的默認值。
        --cgroups-per-qos                                         開啓創建 QoS cgroup 層級,如果設置爲 true 將創建頂級 QoS 和容器 cgroups 。(默認 true)
        --chaos-chance float                                      如果大於 0.0 ,引入隨機客戶端錯誤及延遲,用來測試。
        --client-ca-file string                                   如果設置,任何帶有 client-ca-file 中籤名的客戶端證書的請求都將通過與客戶端證書 CommonName >對應的標識進行身份認證。
        --cloud-config string                                     雲提供商的配置文件路徑,沒有配置文件時爲空字符串。
        --cloud-provider string                                   雲服務提供商。默認情況下, kubelet 將嘗試自動檢測雲提供商,如果不使用雲提供商可以指定該參數爲空字符串。(默認“auto-detect”)
        --cluster-dns stringSlice                                 DNS 服務器的IP地址列表,逗號分隔。這個值是用於配置指定了“dnsPolicy=ClusterFirst”的容器 DNS 服務器。注意:列表中所有的DNS服務器必須提供相同的記錄值,否則集羣中的名稱解析可能無法正常工作,也就是無法確保連接DNS服務器提供正確的名稱解析。
        --cluster-domain string                                   集羣域名。如果設置, kubelet 將配置所有容器除了主機搜索域還將搜索當前域。 
        --cni-bin-dir string                                      <警告: Alpha 特性>搜索CNI插件二進制文件的完整路徑。默認值:/opt/cni/bin
        --cni-conf-dir string                                     <警告: Alpha 特性> 搜索CNI插件配置文件的完整路徑。默認值:/etc/cni/net.d
        --container-runtime string                                運行時使用的容器。可選值:‘docker’和‘rkt’。(默認‘docker’)
        --container-runtime-endpoint string                       [實驗]遠程運行服務的端點。目前在 Linux 上支持 unix 套接字,在 windows 上支持 tcp 。例如:‘unix:///var/run/dockershim.sock’,‘tcp://localhost:3735’(默認‘unix:///var/run/dockershim.sock’)
        --containerized                                           在容器中運行 kubelet 的實驗支持。用於測試。
        --contention-profiling                                    如果啓用了分析,啓用鎖爭用分析。
        --cpu-cfs-quota                                           爲指定 CPU 限制的容器強制限制 CPU CFS 配額(默認 true)
        --docker-disable-shared-pid                               當運行 1.13.1 或更高版本的 docker 時,容器運行時接口( CRI )默認在同一個 pod 中的容器使用一>個共享的 PID 名稱空間,將此標誌設置爲對獨立的 PID 名稱空間用來恢復先前的行爲,這個功能將在未來的 Kubernetes 發佈版本移除。
        --docker-endpoint string                                  用來通信的 docker 端點。(默認“unix:///var/run/docker.sock”)
        --enable-controller-attach-detach                         允許附加/分離控制器來管理調度到當前節點的附加/分離卷,並禁用 kubelet 執行任何附加/分離操作(默認 true)
        --enable-custom-metrics                                   支持收集自定義指標。
        --enable-debugging-handlers                               開啓服務用來收集日誌及本地運行的容器及命令(默認 true)
        --enable-server                                           開啓 kubelet 服務(默認 true)
        --enforce-node-allocatable stringSlice                    由 kubelet 執行的節點分配執行級別列表,逗號分隔。可選項有 'pods', 'system-reserved' 和 'kube-reserved' 。如果指定後兩種,必須同時指定 '--system-reserved-cgroup' 和 '--kube-reserved-cgroup'。 查看 https://git.k8s.io/community/contributors/design-proposals/node-allocatable.md 獲取更多細節。 (默認 [ pods ])
        --event-burst int32                                       一個突發事件記錄的最大值。 僅當設置 --event-qps 大於0時,暫時允許該事件記錄值超過設定值,但不能超過 event-qps 的值。(默認10)
        --event-qps int32                                         設置爲大於0的值,將限制每秒創建的事件數目最大爲當前值,設置爲0則不限制。(默認爲5)
        --eviction-hard string                                    一個清理閾值的集合(例如 memory.available<1Gi ),達到該閾值將觸發一次容器清理,(默認“memory.available < 100 mi,nodefs.available < 10%,nodefs.inodesFree < 10%)
        --eviction-max-pod-grace-period int32                     滿足清理閾值時,終止容器組的最大響應時間,如果設置爲負值,將使用 pod 設定的值。.
        --eviction-minimum-reclaim string                         一個資源回收最小值的集合(例如 imagefs.available=2Gi ),即 kubelet 壓力較大時 ,執行 pod >清理回收的資源最小值。
        --eviction-pressure-transition-period duration            過渡出清理壓力條件前, kubelet 需要等待的時間。(默認 5m0S )
        --eviction-soft string                                    一個清理閾值的集合(例如 memory.available<1.5Gi ),如果達到一個清理週期將觸發一次容器清理>。
        --eviction-soft-grace-period string                       一個清理週期的集合(例如 memory.available=1m30s ),在觸發一個容器清理之前一個軟清理閾值需>要保持多久。
        --exit-on-lock-contention                                 kubelet 是否應該退出鎖文件爭用。
        --experimental-allocatable-ignore-eviction                設置爲 true ,計算節點分配時硬清理閾值將被忽略。查看 https://git.k8s.io/community/contributors/design-proposals/node-allocatable.md 獲取更多細節。[默認 false]
        --experimental-allowed-unsafe-sysctls stringSlice         不安全的 sysctls 或者 sysctl 模式(以*結尾)白名單列表,以逗號分隔。在自己的風險中使用這些>。
        --experimental-bootstrap-kubeconfig string                已過時:使用 --bootstrap-kubeconfig
        --experimental-check-node-capabilities-before-mount       [實驗]如果設置爲 true , kubelet 將在執行 mount 之前檢查基礎節點所需組件(二進制文件等)。
        --experimental-fail-swap-on                               如果在節點上啓用了 swap , kubelet 將啓動失敗,這是一個維護遺留行爲的臨時選項,在v1.6啓動失敗是因爲默認啓用了swap。
        --experimental-kernel-memcg-notification                  如果啓用, kubelet 將集成內核 memcg 通知以確定是否達到內存清理閾值,而不是輪詢。
        --experimental-mounter-path string                        [實驗]二進制文件的掛載路徑。保留空以使用默認。
        --experimental-qos-reserved mapStringString               一個資源佔比的集合(例如 memory=50%),描述如何在QoS級別保留pod資源請求,目前僅支持內存。[>默認 none]
        --feature-gates string                                    一組鍵值對,用來描述 alpha 或實驗特性,選項有:
        Accelerators=true|false (ALPHA - default=false)
        AdvancedAuditing=true|false (ALPHA - default=false)
        AffinityInAnnotations=true|false (ALPHA - default=false)
        AllAlpha=true|false (ALPHA - default=false)
        AllowExtTrafficLocalEndpoints=true|false (default=true)
        AppArmor=true|false (BETA - default=true)
        DynamicKubeletConfig=true|false (ALPHA - default=false)
        DynamicVolumeProvisioning=true|false (ALPHA - default=true)
        ExperimentalCriticalPodAnnotation=true|false (ALPHA - default=false)
        ExperimentalHostUserNamespaceDefaulting=true|false (BETA - default=false)
        LocalStorageCapacityIsolation=true|false (ALPHA - default=false)
        PersistentLocalVolumes=true|false (ALPHA - default=false)
        RotateKubeletClientCertificate=true|false (ALPHA - default=false)
        RotateKubeletServerCertificate=true|false (ALPHA - default=false)
        StreamingProxyRedirects=true|false (BETA - default=true)
        TaintBasedEvictions=true|false (ALPHA - default=false)
        --file-check-frequency duration                           檢查新數據配置文件的週期(默認 20s)
        --google-json-key string                                  用於谷歌雲平臺服務帳戶身份驗證的 JSON 密鑰。
        --hairpin-mode string                                     kubelet 如何設置 hairpin NAT(“髮夾”轉換)。 這使得當服務可以嘗試訪問自己時服務端點可以自動恢復,合法值由 "promiscuous-bridge", "hairpin-veth" 和 "none". (默認 "promiscuous-bridge")
        --healthz-bind-address ip                                 健康檢查服務的IP地址。(設置 0.0.0.0 使用所有地址)(默認 127.0.0.1 )
        --healthz-port int32                                      本地健康檢查服務的端口號(默認 10248 )
        --host-ipc-sources stringSlice                            kubelet 允許 pod 使用主機 ipc 名稱空間列表,逗號分隔。(默認[*])
        --host-network-sources stringSlice                        kubelet 允許 pod 使用主機網絡列表,逗號分隔。(默認[*])
        --host-pid-sources stringSlice                            kubelet 允許 pod 使用主機 pid 名稱空間列表,逗號分隔。(默認[*])
        --hostname-override string                                如果不是空,將使用該字符作爲 hostname 而不是真實的 hostname 。
        --http-check-frequency duration                           通過 http 檢查新數據的週期(默認 20s)
        --image-gc-high-threshold int32                           鏡像佔用磁盤比率最大值,超過此值將執行鏡像垃圾回收。(默認 85)
        --image-gc-low-threshold int32                            鏡像佔用磁盤比率最小值,低於此值將停止鏡像垃圾回收。(默認 80)
        --image-pull-progress-deadline duration                   鏡像拉取進度最大時間,如果在這段時間拉取鏡像沒有任何進展,將取消拉取。(默認 1m0s)
        --image-service-endpoint string                           [實驗]遠程鏡像服務端點。如果沒有指定,默認情況下將與容器運行時端點相同。目前在Linux上支持unix套接字,在windows上支持tcp。  例如:'unix:///var/run/dockershim.sock', 'tcp://localhost:3735'
        --iptables-drop-bit int32                                 用於標記丟棄數據包的 fwmark 空間位,取值範圍[0,31]。(默認 15)
        --iptables-masquerade-bit int32                           用於標記 SNAT 數據包的 fwmark 空間位,取值範圍[0,31],請將此參數與 kube-proxy 中的相應參數匹配。(默認 14)
        --keep-terminated-pod-volumes                             在容器停止後保持容器卷掛載在節點上,這對調試卷相關問題非常有用。
        --kube-api-burst int32                                    與 kubernetes apiserver 會話時的併發數。(默認 10)
        --kube-api-content-type string                            發送到 apiserver 的請求 Content type 。(默認“application/vnd.kubernetes.protobuf”)
        --kube-api-qps int32                                      與 kubernetes apiserver 會話時的 QPS 。(默認 15
        --kube-reserved mapStringString                           一個資源預留量的集合(例如 cpu=200m,memory=500Mi, storage=1Gi ) ,即爲 kubernetes 系統組件預留的資源,目前支持根文件系統的 cpu、內存和本地存儲。查看 http://kubernetes.io/docs/user-guide/compute-resources 或許更多細節。[默認 none]
        --kube-reserved-cgroup string                             用來管理 Kubernetes 組件的頂級 cgroup 的絕對名稱,這些組件用來管理那些標記‘--kube-reserved’的計算資源。 [默認'']
        --kubeconfig string                                       kubeconfig 文件的路徑,用來指定如何連接到 API server ,此時將使用 --api-servers  除非設置了--require-kubeconfig 。(默認“/var/lib/kubelet/kubeconfig”)
        --kubelet-cgroups string                                  可選的 cgroups 的絕對名稱來創建和運行 kubelet
        --lock-file string                                        <警告: Alpha 特性> kubelet 用於鎖文件的路徑。
        --make-iptables-util-chains                               如果爲 true , kubelet 將確保 iptables 工具規則在主機上生效。(默認 true)
        --manifest-url string                                     訪問容器清單的 URL 。
        --manifest-url-header string                              訪問容器清單的 URL 的 HTTP 頭, key 和 value 之間用:分隔
        --max-open-files int                                      kubelet 進程可以打開的文件數目。(默認 1000000)
        --max-pods int32                                          當前 kubelet 可以運行的容器組數目。(默認 110)
        --minimum-image-ttl-duration duration                     在執行垃圾回收前未使用鏡像的最小年齡。例如: '300ms', '10s' or '2h45m'. (默認 2m0s)
        --network-plugin string                                   <警告: Alpha 特性> 在 kubelet/pod 生命週期中爲各種事件調用的網絡插件的名稱
        --network-plugin-mtu int32                                <警告: Alpha 特性> 傳遞給網絡插件的 MTU 值以覆蓋缺省值,設置爲0將使用默認值 1460
        --node-ip string                                          當前節點的IP地址,如果設置, kubelet 將使用這個地址作爲節點ip地址。
        --node-labels mapStringString                             <警告: Alpha 特性> 在集羣中註冊節點時添加的標籤,標籤必須爲用英文逗號分隔的 key=value 對。
        --node-status-update-frequency duration                   指定 kubelet 的節點狀態爲 master 的頻率。注意:在修改時要小心,它必須與 nodecontroller 的 nodeMonitorGracePeriod 一起工作。(默認 10s)
        --oom-score-adj int32                                     kubelet 進程的 oom-score-adj 值,範圍[-1000, 1000] (默認 -999)
        --pod-cidr string                                         用於 pod IP 地址的 CIDR ,僅在單點模式下使用。在集羣模式下,這是由 master 獲得的。
        --pod-infra-container-image string                        每個 pod 中的 network/ipc 名稱空間容器將使用的鏡像。 (默認 "gcr.io/google_containers/pause-amd64:3.0")
        --pod-manifest-path string                                包含 pod 清單文件的目錄或者單個 pod 清單文件的路徑。從點開始的文件將被忽略。
        --pods-per-core int32                                     可以在這個 kubelet 上運行的容器組數目,在這個 kubelet 上的容器組數目不能超過 max-pods ,所>以如果在這個 kubelet 上運行更多的容器組應同時使用 max-pods ,設置爲 0 將禁用這個限制。
        --port int32                                              kubelet 服務的端口 (默認 10250)
        --protect-kernel-defaults                                 kubelet 的默認內核調優行爲。設置之後, kubelet 將在任何可調參數與默認值不同時拋出異常。
        --provider-id string                                      在機器數據庫中標識節點的唯一標識符,也就是雲提供商
        --read-only-port int32                                    沒有認證/授權的只讀 kubelet 服務端口。 (設置爲 0 以禁用) (默認 10255)
        --really-crash-for-testing                                設置爲 true ,有可能出現應用崩潰。 用於測試。
        --register-node                                           用 apiserver 註冊節點 (如果設置了 --api-servers 默認爲 true ) (默認 true)
        --register-with-taints []api.Taint                        用給定的列表註冊節點 (逗號分隔 "<key>=<value>:<effect>")。如果 register-node 爲 false 將無>操作
        --registry-burst int32                                    拉去鏡像的最大併發數,允許同時拉取的鏡像數,不能超過 registry-qps ,僅當 --registry-qps 大>於 0 時使用。 (默認 10)
        --registry-qps int32                                      如果大於 0 ,將限制每秒拉去鏡像個數爲這個值,如果爲 0 則不限制。 (默認 5)
        --require-kubeconfig                                      設置爲 true , kubelet 將在配置錯誤時退出並忽略 --api-servers 指定的值以使用在 kubeconfig >文件中定義的服務器。
        --resolv-conf string                                      用作容器 DNS 解析配置的解析器配置文件。 (默認 "/etc/resolv.conf")
        --rkt-api-endpoint string                                 與 rkt API 服務通信的端點,僅當設置 --container-runtime='rkt' 時有效 (默認 "localhost:15441")
        --rkt-path string                                         rkt 二進制文件的路徑,設置爲空將使用 $PATH 中的第一個 rkt ,僅當設置 --container-runtime='rkt' 時有效。
        --root-dir string                                         管理 kubelet 文件的目錄 (卷掛載等). (默認 "/var/lib/kubelet")
        --runonce                                                 如果爲 true ,將在從本地清單或者遠端url生成容器組後退出,除非指定了 --api-servers 和 --enable-server
        --runtime-cgroups string                                  可選的 cgroups 的絕對名稱,創建和運行時使用。
        --runtime-request-timeout duration                        除了 pull, logs, exec 和 attach 這些長運行請求之外的所有運行時請求的超時時間。 當到達超時時間,kubelet 將取消請求,拋出異常並稍後重試。 (默認 2m0s)
        --seccomp-profile-root string                             seccomp 配置文件目錄。 (默認 "/var/lib/kubelet/seccomp")
        --serialize-image-pulls                                   一次拉取一個鏡像。建議在安裝 docker 版本低於 1.9 的節點或一個Aufs存儲後端不去修改這個默認值。查看問題 #10959 獲取更多細節。 (默認 true)
        --streaming-connection-idle-timeout duration              在連接自動關閉之前,流連接的最大空閒時間,0 表示永不超時。例如: '5m' (默認 4h0m0s)
        --sync-frequency duration                                 同步運行容器和配置之間的最大時間間隔 (默認 1m0s)
        --system-cgroups /                                        可選的 cgroups 的絕對名稱,用於將未包含在 cgroup 內的所有非內核進程放置在根目錄 / 中,回滾>這個標識需要重啓。
        --system-reserved mapStringString                         一個 資源名稱=量 的集合(例如 cpu=200m,memory=500Mi ) 用來描述爲非 kubernetes 組件保留的資源。目前僅支持 cpu 和內存。 查看 http://kubernetes.io/docs/user-guide/compute-resources 或許更多細節。 [默認 none]
        --system-reserved-cgroup string                           頂級 cgroup 的絕對名稱,用於管理計算資源的非 kubernetes 組件,這些組件通過'--system-reserved'標識保留系統資源。除了'/system-reserved'。 [默認'']
        --tls-cert-file string                                    包含用於 https 服務的 x509 證書的文件 (中間證書,如果有,在服務器認證後使用)。如果沒有提供 --tls-cert-file 和 --tls-private-key-file , 將會生產一個自簽名的證書及密鑰給公開地址使用,並將其保存在 --cert-dir 指定的目錄。
        --tls-private-key-file string                             包含 x509 私鑰匹配的文件 --tls-cert-file
        --version version[=true]                                  打印 kubelet 版本並退出。
        --volume-plugin-dir string                                <警告: Alpha 特性> 第三方卷插件的完整搜索路徑。 (默認 "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/")
        --volume-stats-agg-period duration                        指定 kubelet 計算和緩存所有容器組及卷的磁盤使用量時間間隔。設置爲 0 禁用卷計算。(默認 1m)
    
    
  2. kube-proxy:代理,service實現跨主機跨容器之間的通信是通過kube-proxy實現的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章