k8s部署和基本使用
一個簡單的網際網路應用
K8S叢集的基本構造
master:負責管理整個叢集,例如,對應用進行排程(擴縮)、維護應用期望的狀態、對應用進行釋出等。
node:叢集中的宿主機(可以是物理機也可以是虛擬機器),每個node上都有一個agent,名為kubelet,用於跟master通訊。同時一個node需要有管理容器的工具包,用於管理在node上執行的容器(如docker)。一個k8s叢集至少要有3個節點
master節點上有如下程序(一個apiserver,一個controller-manager,一個scheduler)
$ ps -elf|grep -i Kubernetes
0 R umelog 11077 5416 0 80 0 - 28166 - 14:51 pts/2 00:00:00 grep --color=auto -i Kubernetes
4 S root 63481 1 1 80 0 - 65218 futex_ 10:48 ? 00:02:52 /usr/bin/kube-apiserver --storage-backend=etcd2 --insecure-bind-address=0.0.0.0 --insecure-port=1180 --etcd-servers=http://10.237.65.192:2379,http://10.237.65.193:2379,http://10.237.65.194:2379 --service-cluster-ip-range= 169.169.0.0/16 --admission_control=NamespaceLifecycle,LimitRanger,ResourceQuota,ServiceAccount --service-node-port-range=10-65535 --client_ca_file=/etc/kubernetes/ssl/ca.crt --tls-private-key-file=/etc/kubernetes/ssl/apiserver.key --tls-cert-file=/etc/kubernetes/ssl/apiserver.crt --logtostderr=false --log-dir=/opt/log/kubernetes --v= 0 --allow_privileged=true
4 S root 63560 1 1 80 0 - 27582 futex_ 10:50 ? 00:02:35 /usr/bin/kube-controller-manager --node-sync-period=10s --service_account_private_key_file=/etc/kubernetes/ssl/apiserver.key --root-ca-file=/etc/kubernetes/ssl/ca.crt --v=0 --logtostderr=false --log-dir=/var/log/kubernetes --master=http://10.237.65.192:1180
4 S root 63603 1 0 80 0 - 15208 futex_ 10:51 ? 00:01:09 /usr/bin/kube-scheduler --logtostderr=false --log-dir=/var/log/kubernetes --v=0 --master=http://10.237.65.192:1180
API server作為叢集的核心,負責各個功能模組之間的通訊。叢集中各個模組通過API server將資訊存入etcd,當需要獲取和操作這些資料時,則通過API server提供的REST介面來實現,從而實現各模組之間的資訊互動。
Node節點下如有日下程序(一個proxy,一個kublet)
ps -elf|grep -i kubernetes
4 S root 2672 1 0 80 0 - 14101 futex_ 13:08 ? 00:00:13 /usr/bin/kube-proxy --proxy-mode=iptables --logtostderr=false --log-dir=/var/log/kubernetes --v=0 --master=http://10.237.65.192:1180
0 S umelog 20568 20447 0 80 0 - 28167 pipe_w 15:28 pts/0 00:00:00 grep --color=auto -i kubernetes
4 S root 62199 1 0 80 0 - 319964 futex_ 11:02 ? 00:02:13 /usr/bin/kubelet --root_dir=/var/kubernetes --v=0 --pod_infra_container_image=10.237.65.192:1179/google_containers/pause:3.0 --cluster_dns=169.169.0.100 --cluster_domain=cluster.local --address=0.0.0.0 --port=10250 --api_servers=http://10.237.65.192:1180 --logtostderr=false --allow_privileged=true --log-dir=/var/log/kubernetes
基本概念
在K8S中,Pod是建立或部署的最小/最簡單的基本單位,一個Pod是由多個Docker容器組成的容器組。
Pod
Kubernetes中的Pod使用可分兩種主要方式:
- Pod中執行一個容器。“one-container-per-Pod”模式是Kubernetes最常見的用法; 在這種情況下,你可以將Pod視為單個封裝的容器,但是Kubernetes是直接管理Pod而不是容器。
- Pod中執行多個需要一起工作的容器。Pod可以封裝緊密耦合的應用,它們需要由多個容器組成,它們之間能夠共享資源,這些容器可以形成一個單一的內部service單位 - 一個容器共享檔案,另一個“sidecar”容器來更新這些檔案。Pod將這些容器的儲存資源作為一個實體來管理。
Service
是真實應用服務的抽象。Service通常用來將浮動的資源與後端真實提供服務的容器進行關聯。Service對外表現為一個單一的訪問介面,外部不需要了解後端的規模與機制。Service是定義在叢集中一組執行Pod集合的抽象資源,它提供了所有相同的功能。當一個Service資源被建立後,將會分配一個唯一的IP(也叫做叢集IP),這個IP地址將存在於Service的整個生命資源,Service一旦被建立,整個IP無法進行修改。Pod可以通過Service進行通訊,並且所有的通訊將會通過Service自動負載均很到所有的Pod中的容器。
Pod IP/Cluster IP/外部IP
- Pod IP
Kubernetes的最小部署單元是Pod。利用Flannel作為不同HOST之間容器互通技術時,由Flannel和etcd維護了一張節點間的路由表。Flannel的設計目的就是為叢集中的所有節點重新規劃IP地址的使用規則,從而使得不同節點上的容器能夠獲得“同屬一個內網”且”不重複的”IP地址,並讓屬於不同節點上的容器能夠直接通過內網IP通訊。每個Pod啟動時,會自動建立一個映象為gcr.io/google_containers/pause:0.8.0的容器,pod內部與外部的通訊經由此容器代理,該容器的IP也可以稱為Pod IP。 - Cluster IP
Pod IP 地址是實際存在於某個網絡卡(可以是虛擬裝置)上的,但Service Cluster IP就不一樣了,沒有網路裝置為這個地址負責。它是由kube-proxy使用Iptables規則重新定向到其本地埠,再均衡到後端Pod的。 - 外部IP
Service物件在Cluster IP range池中分配到的IP只能在內部訪問,如果服務作為一個應用程式內部的層次,還是很合適的。如果這個Service作為前端服務,準備為叢集外的客戶提供業務,我們就需要給這個服務提供公共IP了。
Replication Controller
Replication Controller 保證了在所有時間內,都有特定數量的Pod副本正在執行,如果太多了,Replication Controller就殺死幾個,如果太少了,Replication Controller會新建幾個,和直接建立的pod不同的是,Replication Controller會替換掉那些刪除的或者被終止的pod,不管刪除的原因是什麼(維護阿,更新啊,Replication Controller都不關心)。基於這個理由,我們建議即使是隻建立一個pod,我們也要使用Replication Controller。Replication Controller 就像一個程序管理器,監管著不同node上的多個pod,而不是單單監控一個node上的pod,Replication Controller 會委派本地容器來啟動一些節點上服務(Kubelet ,Docker)。
流程和原理
Service啟動流程
- 當我們的Service被建立時,Kubernetes給它分配一個地址10.0.0.1(Cluster IP)。這個地址從我們啟動API的service-cluster-ip-range引數(舊版本為portal_net引數)指定的地址池中分配,比如–service-cluster-ip-range=10.0.0.0/16。
- 叢集內的所有kube-proxy都會注意到這個Service。當proxy發現一個新的service後,它會在本地節點開啟一個任意埠,建相應的iptables規則,重定向服務的IP和port到這個新建的埠,開始接受到達這個服務的連線。
kube-proxy轉發的兩種模式
由kube-proxy轉發,效率不是很高
kube-proxy只負責更改iptable的設定。核心轉發。效率高。
元件介紹
Etcd
etcd的官網介紹是一個分散式的K/V儲存,而Zookeeper的官網介紹是一個高度可用的分散式協調者。看起來他們做的事情完全不同啊,那我們來比較一下功能介紹。但是實際上二者非常類似。
功能 | etcd | Zookeeper |
---|---|---|
分散式鎖 | 有 | 有 |
watcher | 有 | 有 |
一致性演算法 | raft | zab(paxos演算法的改進) |
選舉 | 有 | 有 |
元資料(metadata)儲存 | 有 | 有 |
二者的使用場景的對比如下
應用場景 | etcd | Zookeeper |
---|---|---|
釋出與訂閱(配置中心) | 有 | 有 |
軟負載均衡 | 有 | 有 |
命名服務(Naming Service) | 有 | 有 |
服務發現 | 有 | 有 |
分散式通知/協調 | 有 | 有 |
叢集管理與Master選舉 | 有 | 有 |
分散式鎖 | 有 | 有 |
分散式佇列 | 有 | 有 |
ETCD儲存著docker叢集的一些基本配置。
$ etcdctl ls /registry
/registry/minions
/registry/deployments
/registry/ranges
/registry/services
/registry/apiregistration.k8s.io
/registry/configmaps
/registry/events
/registry/secrets
/registry/replicasets
/registry/pods
/registry/controllers
/registry/namespaces
/registry/serviceaccounts
TLS
SSL協議位於TCP/IP協議與各種應用層協議之間,為資料通訊提供安全支援。SSL協議可分為兩層: SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供資料封裝、壓縮、加密等基本功能的支援。
安全傳輸層協議(TLS)用於在兩個通訊應用程式之間提供保密性和資料完整性。該協議由兩層組成: TLS 記錄協議(TLS Record)和 TLS 握手協議(TLS Handshake)。較低的層為 TLS 記錄協議,位於某個可靠的傳輸協議(例如 TCP)上面,與具體的應用無關,所以,一般把TLS協議歸為傳輸層安全協議。
flannel
根據官網的描述,flannel是一個專為kubernetes定製的三層網路解決方案,主要用於解決容器的跨主機通訊問題。
元件選擇
Kubernetes 1.9 <–Docker 1.11.2 to 1.13.1 and 17.03.x
Kubernetes 1.8 <–Docker 1.11.2 to 1.13.1 and 17.03.x
Kubernetes 1.7 <–Docker 1.10.3, 1.11.2, 1.12.6
Kubernetes 1.6 <–Docker 1.10.3, 1.11.2, 1.12.6
Kubernetes 1.5 <–Docker 1.10.3, 1.11.2, 1.12.3
常用命令kubeadm/kubelet/kubectl
kubeadm —— 啟動 k8s 叢集的命令工具
kubelet —— 叢集容器內的命令工具
kubectl —— 操作叢集的命令工具
相關推薦
k8s部署和基本使用
一個簡單的網際網路應用 K8S叢集的基本構造 master:負責管理整個叢集,例如,對應用進行排程(擴縮)、維護應用期望的狀態、對應用進行釋出等。 node:叢集中的宿主機(可以是物理機也可以是虛擬機器),每個node上都有一個agent,名為kubelet
Rundeck部署和基本使用
資源 connector api 限制 xmx 歷史 win 通知 執行 rundeck 介紹 Rundeck 是一款能在數據中心或雲環境中的日常業務中使程序自己主動化的開源軟件。Rundeck 提供了大量功能。能夠減輕耗時繁重的體力勞動。團隊能夠相互協作,分享
MongoDB復制集部署和基本管理
parent rom 通過 日誌 serve ati 方便 nec ember MongoDB復制集部署和基本管理 MongoDB復制集概述 復制集(Replica Sets)是額外的數據副本,是跨多個服務器同步數據的過程,復制集提供了冗余並增加了數據的可用性,通過復制集可
docker~linux下的部署和基本命令
回到目錄 docker是最近比較流行的容器工具,它可以幫助我們快速部署應用,尤其是在“微服務”環境下,成百個服務要去啟動,停止,部署一次太麻煩,而如果把它部署到docker裡,下一次應用就方便多了,如果需要幾行程式碼就搞定了! 百度百科定義 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們
Nginx 之一 伺服器的安裝部署(一): LInux 環境下 Nginx 伺服器的安裝和基本配置
一、編譯和安裝前的準備工作 本部落格依賴環境: Linux Ubuntu 16.04 1.1 足夠的磁碟空間 能夠裝得下 Nginx 的軟體包和安裝檔案, 這個基本都能滿足。 1.2 需要的工具 為了編譯 Nginx 原始碼, 需要安裝標準的 GCC 編譯器。
K8s部署過程和一些坑
使用centos:7.5 K8s部署過程文件 按照以下文件完整部署。 https://github.com/opsnull/follow-me-install-kubernetes-cluster dashboard外掛部署按照以下文件部署。 https://w
HBase四種部署模式和基本操作
本文主要包括兩部分的內容,第一部分主要包HBase的四種安裝方法,分別是:① 單機版模式,② 偽叢
SQL Server常用的關鍵字和基本關鍵字
fix 數據庫 刪除 總結 數據表 reader 不常用 基本 clas 個人覺得sql數據庫的關鍵字不常用比較會忘記,但是對數據表的靈活應用卻很重要,所以在這裏總結一些! 一、常用關鍵字 ALTER TABLE(修改表)用於在已有的表中添加、修改或刪除列。
C#多線程之旅(1)——介紹和基本概念
隔離 cnblogs 影響 3-0 同時 ima 並行 logic mes 閱讀目錄 一、多線程介紹 二、Join 和Sleep 三、線程怎樣工作 四、線程和進程 五、線程的使用和誤用 原文地址:C#多線程之旅(1)——介紹和基本概念 C#多線程之旅目錄: C#
Unity3D中tolua的“安裝部署和使用“教程
替換 部署 ref 比對 text asset gin 系統 .com 棄坑Cocos2d-x,轉戰Unity3D 考慮到項目一定會使用熱更,花了不少時間比對了lua的支持方案,最後定為tolua,原因不解釋。 俗話說,萬事開頭難,中間難,最後難……我反正是沒有找到如何安裝
1-ajax概念和基本形式
ron world! scrip change req asc 操作 fun and <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title&g
redis安裝和基本使用
redisredis的概念: Redis是一個開源的基於內存亦可持久化的日誌型、Key-Value數據庫 redis工具: redis-benchmark #用於進行redis性能測試的工具 redis-sentinel #用於集群管理 redis-cli #redis客戶端 redis-s
C++ Primer 學習筆記_5_變量和基本類型(續2)
key 情況 boa 類和對象 類定義 優點 splay 查看 變量定義 變量和基本類型 七、枚舉 枚舉不但定義了整數常量集,並且還把它們聚集成組。 枚舉與簡單的const常量相比孰優孰劣, 通過以下一段代
mongodb配置和基本操作
特性 服務 win done service 基本 添加 close english MongoDB3.0新特性WiredTigerMMAPv1可插拔引擎API基於web的可視化管理工具 查看版本號mongod --version啟動數據庫 mongod --dbpath
使用python腳本代碼本地測試環境部署和啟動 V0.1
svn python #!/usr/bin/evn python#encoding=utf-8#author:[email protected]/* */import sysimport osimport shutilimport commandsimport timeimport sub
CentOS 7.x下部署和配置zabbix 3.2.x監控工具
centos zabbix 監控一.安裝zabbix服務端1.下載官方yum源:rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm2.安裝zabbix服務端(會自動安裝http
【jmeter(1)】jmeter的安裝和基本使用
多少 一個 將在 主界面 地址 ads 發送 收集 處理器 本篇文章主要介紹一下JMeter的安裝及基本使用方法。 1.安裝 JMeter的官方網址為http://jmeter.apache.org/ 下載地址為http://jmeter.apache.org/downlo
WebService 的創建,部署和使用
framework model 新建文件夾 文件拷貝 支持 control ice div 默認 轉自:http://blog.csdn.net/yexuanbaby/article/details/9029605/ WebService,即Web服務,能使得運行在不
mysql管理和基本操作
sql 修改root密碼 服務 blog sam www 網址 resolve 日誌 進去mysql:mysql –uroot –p 重啟數據庫:[[email protected]/* */ ~]# /etc/init.d/mysqld restart1.
storm集群部署和配置過程詳解
多少 帶來 進程 創建 使用 命令 介紹 aml 可能 ---恢復內容開始--- 先整體介紹一下搭建storm集群的步驟: 設置zookeeper集群 安裝依賴到所有nimbus和worker節點 下載並解壓storm發布版本到所有nimbus和worker節點 配置s