kubernetes v1.12.0叢集部署(二進位制方式+基於CA簽名雙向數字證書認證方式)
kubernetes 最簡單的方式是通過yum install kubernetes 直接安裝,但是預設安裝的是v5版本的kubernetes,所以不推薦使用,還有一種是在v1.4版本開始引入了的kubeadm工具一鍵部署,但是如果 沒有訪問gcr.io的網路環境的話部署過程會報錯。所以我這邊推薦使用二進位制的方式部署
原始碼包下載地址:
以及客戶端:kubernetes-node-linux-amd64.tar.gz
1、兩臺CentOS7 主機:
10.1.31.205 docker1 Master
10.1.1.206 docker2 Node
初始化:
設定hosts地址解析 關閉selinuc 關閉防火牆firewalld
Master上部署:
- etcd
- kube-apiserver
- kube-controller-manager
- kube-scheduler
Node上部署:
- Docker
- kubelet
- kube-proxy
1、etcd
etcd服務是Kubernetes叢集的核心資料庫,在安裝各個服務之前需要先安裝啟動。這裡演示的是部署etcd單節點,當然也可以配置3節點的叢集。如果想配置更加簡單,推薦直接使用yum方式安裝。
# wget https://github.com/coreos/etcd/releases/download/v3.2.20/etcd-v3.2.20-linux-amd64.tar.gz # tar xf etcd-v3.2.20-linux-amd64.tar.gz # cd etcd-v3.2.20-linux-amd64 # cp etcd etcdctl /usr/bin/ # mkdir /var/lib/etcd # mkdir /etc/etcd
編輯systemd管理檔案:
vim /usr/lib/systemd/system/etcd.service
[Unit] Description=Etcd Server After=network.target [Service] Type=simple WorkingDirectory=/var/lib/etcd/ EnvironmentFile=-/etc/etcd/etcd.conf ExecStart=/usr/bin/etcd [Install] WantedBy=multi-user.target
啟動服務:
systemctl daemon-reload systemctl start etcd systemctl status etcd.service
檢視服務狀態:
說明: etcd 會啟用兩個埠,其中2380 是叢集的通訊埠,2379是服務埠。如果是配置etcd叢集,則要修改配置檔案,設定監聽IP和埠。
etcdctl cluster-health 驗證etcd是否正常啟動
下載到master: kubernetes-server-linux-amd64.tar.gz 到/usr/local/
#tar xf kubernetes-server-linux-amd64.tar.gz -c /usr/local
#cd kubernetes/server/bin
#cp `ls|egrep -v "*.tar|*_tag"` /usr/bin/
將以下檔案拷貝到/usr/bin下
配置kube-apiserver:
1、編輯systemd的啟動檔案:
vim /usr/lib/systemd/system/kube-apiserver.service
[Unit] Description=Kubernetes API Server Documentation=https://kubernetes.io/docs/concepts/overview After=network.target After=etcd.service [Service] EnvironmentFile=/etc/kubernetes/apiserver ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS Restart=on-failure Type=notify LimitNOFILE=65536 [Install] WantedBy=multi-user.target
2、配置引數檔案(需要先建立配置目錄):
cat /etc/kubernetes/apiserver |grep -v ^$ | grep -v ^#
KUBE_API_ARGS="--storage-backend=etcd3 \
--etcd-servers=http://127.0.0.1:2379 \
--bind-address=0.0.0.0 \
--secure-port=6443 \
--service-cluster-ip-range=10.222.0.0/16 \
--service-node-port-range=1-65535 \
--client-ca-file=/etc/kubernetes/ssl/ca.crt \
--tls-private-key-file=/etc/kubernetes/ssl/server.key \
--tls-cert-file=/etc/kubernetes/ssl/server.crt \
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,DefaultStorageClass,ResourceQuota \
--logtostderr=false \
--log-dir=/var/log/kubernetes \
--v=2"
- service-cluster-ip-range是servcies的虛擬IP的IP範圍,這裡可以自己定義,不能當前的宿主機網段重疊。
- bind-addres 指定的apiserver監聽地址,對應的監聽埠是6443,使用的https的方式。
- client-ca-file 這是認證的相關檔案,這預先定義,後面會建立證書檔案,並放置到對應的路徑。
3、建立日誌目錄和證書目錄,如果沒有配檔案目錄也需要建立:
mkdir /var/log/kubernetes
mkdir /etc/kubernetes
mkdir /etc/kubernetes/ssl
3、kube-controller-manager
1、配置systemd的啟動檔案:
cat /usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https//github.com/GoogleCloudPlatform/kubernetes
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
2、配置啟動引數檔案:
cat /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--master=https://10.1.31.205:6443 --service-account-private-key-file=/etc/kubernetes/ssl/server.key --logtostderr=true --log-dir=/app/kubernets/log --v=2 --root-ca-file=/etc/kubernetes/ssl/ca.crt --kubeconfig=/etc/kubernetes/kubeconfig"
4、kube-scheduler
1、配置systemd啟動檔案:
# cat /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--master=https://10.1.31.205:6443 --service-account-private-key-file=/etc/kubernetes/ssl/server.key --logtostderr=true --log-dir=/app/kubernets/log --v=2 --root-ca-file=/etc/kubernetes/ssl/ca.crt --kubeconfig=/etc/kubernetes/kubeconfig"
[[email protected] bin]# cat /usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
2、配置引數檔案:
cat /etc/kubernetes/scheduler
KUBE_SCHEDULER_ARGS="--master=https://10.1.31.205:6443 --logtostderr=false --log-dir=/app/kubernets/log --kubeconfig=/etc/kubernetes/kubeconfig --v=2"
5、建立kubeconfig檔案
cat /etc/kubernetes/kubeconfig
apiVersion: v1
kind: Config
users:
- name: controllermanager
user:
client-certificate: /etc/kubernetes/ssl/cs_client.crt
client-key: /etc/kubernetes/ssl/cs_client.key
clusters:
- name: local
cluster:
certificate-authority: /etc/kubernetes/ssl/ca.crt
contexts:
- context:
cluster: local
user: controllermanager
name: my-context
current-context: my-context
6、建立CA證書
1、配置kube-apiserver的CA證書和私鑰檔案:
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=10.1.31.205" -days 5000 -out ca.crt #CN填的是master ip地址
openssl genrsa -out server.key 2048
2、建立master_ssl.cnf檔案:
cat ../master_ssl.cnf
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
DNS.5 = k8s_master
IP.1 = 10.222.0.1 # ClusterIP 地址
IP.2 = 10.1.31.205 # master IP地址
3、基於上述檔案,建立server.csr和 server.crt檔案,執行如下命令:
openssl req -new -key server.key -subj "/CN=docker1" -config ../master_ssl.cnf -out server.csr #CN是master hostname
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 5000 -extensions v3_req -extfile ../master_ssl.cnf -out server.crt
openssl genrsa -out cs_client.key 2048
4、設定kube-controller-manager相關證書:
cd /etc/kubernetes/ssl/
openssl genrsa -out cs_client.key 2048
openssl req -new -key cs_client.key -subj "/CN=docker1" -out cs_client.csr
openssl x509 -req -in cs_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out cs_client.crt -days 5000
確保/etc/kubernetes/ssl/ 目錄下有如下檔案:
7、啟動服務:
1、啟動kube-apiserver:
# systemctl daemon-reload
# systemctl enable kube-apiserver
# systemctl start kube-apiserver
說明:kube-apiserver 預設會啟動兩個埠(8080和6443),其中,8080是各個元件之間通訊的埠,在新的版本中已經很少使用,kube-apiserver所在的主機一般稱為Master, 另一個埠6443是為HTTPS提供身份驗證和授權的埠。
2、啟動kube-controller-manager:
# systemctl daemon-reload # systemctl enable kube-controller-manager # systemctl start kube-controller-manager
說明:此服務會啟動一個10252的埠
3、啟動kube-scheduler
# systemctl daemon-reload # systemctl enable kube-scheduler # systemctl start kube-scheduler
說明: 此服務會啟動一個10251的埠
NODE節點部署:
Node節點上部署的服務非常簡單,只需要部署 docker、kubelet和kube-proxy服務即可。
上傳Kubernetes的Node節點二進位制包(kubernetes-node-linux-amd64.tar.gz),解壓後執行如下命令:
tar xf kubernetes-node-linux-amd64.tar.gz
cd /kubernetes/node/bin
cp kubectl kubelet kube-proxy /usr/bin/
1.建立kubelet證書
每臺Node節點上都需要配置kubelet的客戶端證書。
複製Master上的ca.crt,ca.key到Node節點上的ssl目錄,執行如下命令生成kubelet_client.crt和kubelet_client.csr檔案:
#openssl genrsa -out kubelet_client.key 2048
#openssl req -new -key kubelet_client.key -subj "/CN=10.1.1.206" -out kubelet_client.csr #cn是node自己的ip地址
#openssl x509 -req -in kubelet_client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out kubelet_client.crt -days 5000
3、kubelet
1、配置啟動檔案:
cat /usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes API Server
Documentation=https://kubernetes.io/doc
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/var/lib/kubelet
ExecStart=/usr/bin/kubelet --kubeconfig=/etc/kubernetes/kubeconfig.yaml --logtostderr=false --log-dir=/var/log/kubernetes --v=2
Restart=on-failure
[Install]
WantedBy=multi-user.target
2、配置檔案:
cat /etc/kubernetes/kubeconfig.yaml
apiVersion: v1
kind: Config
users:
- name: kubelet
user:
client-certificate: /etc/kubernetes/ssl/kubelet_client.crt
client-key: /etc/kubernetes/ssl/kubelet_client.key
clusters:
- name: local
cluster:
certificate-authority: /etc/kubernetes/ssl/ca.crt
server: https://10.1.31.205:6443 #MASTER apiserver
contexts:
- context:
cluster: local
user: kubelet
name: my-context
current-context: my-context
3、啟動服務:
# systemctl daemon-reload # systemctl start kubelet # systemctl enable kubelet
4、在master上驗證:
說明:kubelet充當了一個agent的角色,安裝好kubelet就可以在master上檢視到節點資訊。kubelet的配置檔案是一個yaml格式檔案,對master的指定需要在配置檔案中說明。預設監聽10248、10250、10255、4194埠。
4、 kube-proxy
#cat /usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.service
Requires=network.service
[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
2、建立引數檔案:
# cat /etc/kubernetes/proxy
KUBE_PROXY_ARGS="--master=https://10.1.31.205:6443 --kubeconfig=/etc/kubernetes/kubeconfig.yaml"
3、啟動服務:
# systemctl daemon-reload
# systemctl start kube-proxy
# systemctl enable kube-proxy
說明:啟動服務後預設監聽10249,10256.
相關推薦
kubernetes v1.12.0叢集部署(二進位制方式+基於CA簽名雙向數字證書認證方式)
kubernetes 最簡單的方式是通過yum install kubernetes 直接安裝,但是預設安裝的是v5版本的kubernetes,所以不推薦使用,還有一種是在v1.4版本開始引入了的kubeadm工具一鍵部署,但是如果 沒有訪問gcr.io的網路環境的話部署過程
Kubeadm建立高可用Kubernetes v1.12.0叢集 (轉)
節點規劃 主機名 IP Role k8s-master01 10.3.1.20 etcd、Master、Node、keepalived k8s-master02 10.3.1.21 etcd、Master、Node、keepa
使用kubeadm快速部署Kubernetes(v1.12.1)叢集---來源:馬哥教育馬哥原創
使用kubeadm快速部署Kubernetes(v1.12.1)叢集------來源:馬哥教育馬哥原創 Kubernetes技術已經成為了原生雲技術的事實標準,它是目前基礎軟體領域最為熱門的分散式排程和管理平臺。於是,Kubernetes也幾乎成了時下開發工程師和運維工程師必備的技能之一。 一、主機環境預
DOCKER學習(二)--Kubernetes(v1.12.1)叢集安裝
本文使用Kubeadm安裝Kubernetes kubeadm是Kubernetes官方提供的用於快速安裝Kubernetes叢集的工具,伴隨Kubernetes每個版本的釋出都會同步更新,kubeadm會對叢集配置方面的一些實踐做調整,通過實驗kubeadm可以學習到
kubeadm創建高可用kubernetes v1.12.0集群
架構 r.js 慎用 led validate block boot ade 組件通信 節點規劃 主機名 IP Role k8s-master01 10.3.1.20 etcd、Master、Node、keepalived k8s-master02 10.
Kubernetes v1.12 二進制部署集群
ystemd ice 工作 nod 點名 chang size 命令 engine 官方提供的幾種Kubernetes部署方式 minikube Minikube是一個工具,可以在本地快速運行一個單點的Kubernetes,嘗試Kubernetes或日常開發的用戶使用。
Kubernetes v1.12.4 和 v1.12.5-beta.0 釋出
Kubernetes v1.12.4 和 v1.12.5-beta.0 釋出了。更新內容集中在新增新特性和修復 bug 上。 Action Required ACTION REQUIRED: The Node.Status.Volumes.Attached.Devic
CentOS-7使用kubeadm安裝Kubernetes-1.12.0(how & why)
前言 安裝部署看似基礎,但其中蘊含許多值得深挖的原理。本篇文章不同於一般的部署文章的區別是,除了闡述基本的安裝部署過程,還詳細備註了每一步為何要如此配置,希望能讓讀者知其然更知其所以然。 1. 準備工作 1.1 環境資訊 作業系統:CentOS-7.5.1804
在滴滴雲上學習 Kubernetes v1.13.0:叢集搭建
前言 Kubernetes 1.13 在 2018 年 12 初 GA,這是今年的第四次也是最後一次大版本。此版本繼續關注 Kubernetes 的穩定性和可擴充套件性,其中在儲存和群集生命週期領域的三個主要功能實現普遍可用(GA);Kubeadm 簡化叢集管理、容器儲存介面(CSI)和
使用 Kubeadm 安裝部署 Kubernetes 1.12.1 叢集
手工搭建 Kubernetes 叢集是一件很繁瑣的事情,為了簡化這些操作,就產生了很多安裝配置工具,如 Kubeadm ,Kubespray,RKE 等元件,我最終選擇了官方的 Kubeadm 主要是不同的 Kubernetes 版本都有一些差異,Kubeadm 更新與支援的會好一些。Kubeadm 是 K
centos7 使用二進位制包搭建kubernetes 1.9.0叢集
kubernetes 發展速度非常,至少在目前來說是非常不錯的,很多大公司都在使用容器技術部署專案,而最近比較火的容器管理工具就是kubernetes了。 由於之前公司一直使用的還是yum安裝的v1.5.2,因為沒什麼大的需求就一直沒有更新到新版本,這次出來的1.9.0版本
Tomcat9.0環境部署(小白篇)
ted using mir download out x64 .com oot type Tomcat9.0環境部署 系統環境 下載軟件包 部署JDK 部署Tomcat 啟動測試 系統環境 [root@Zabbix_Client_56 /]# cat /etc/red
使用Kubeadm搭建Kubernetes(1.12.2)叢集
Kubeadm是Kubernetes官方提供的用於快速安裝Kubernetes叢集的工具,伴隨Kubernetes每個版本的釋出都會同步更新,在2018年將進入GA狀態,說明離生產環境中使用的距離越來越近了。 使用Kubeadm搭建Kubernetes叢集本來是件很簡單的事,但由於眾所周知的原因,在中國大陸
國內環境Kubernetes v1.12.1的安裝與配置
一、些重要概念 Cluster:計算、儲存、網路資源的總和。Kubernetes的各種基於容器的應用都是執行在這些資源上的。 Master:Kubernetes的大腦,負責排程各種計算資源。Master可以是物理機或虛擬機器,多個Master可以同時執行,並實現HA。Master
MyCat叢集部署(HAProxy + MyCat)
http://itindex.net/detail/56692-mycat-%E9%9B%86%E7%BE%A4-haproxy 一、本節課程的依賴課程 《高可用架構篇--第13節--MySQL原始碼編譯安裝(CentOS-6.6+MySQL-5.6)》 《高可用架構篇--第14節--M
K8s叢集部署(二)------ Master節點部署
Master節點要部署三個服務:API Server、Scheduler、Controller Manager。 apiserver提供叢集管理的REST API介面,包括認證授權、資料校驗以 及叢集狀態變更等 只有API Server才直接操作etcd 其他模組通過API Server查詢
Hadoop2.5.2叢集部署(完全分散式)
環境介紹 硬體環境 CPU 4 MEM 4G 磁碟 60G 軟體環境 OS:centos6.5版本 64位 Hadoop:hadoop2.5.2 64位 JDK: JDK 1.8.0_91 主機配
MySQL+MMM 高可用叢集部署(一)
一、MMM的功能特點 MMM 即(Master-Master replication manager for MySQL)的簡稱,它是一套支援雙主故障切換和雙主日常管理的指令碼程式,而MMM是用 Perl 語言所開發,其主要功能是: 第一、用來監控和管理 MySQL 資料庫 主主複製(Master-M
MySQL+MMM 高可用叢集部署(二)
接上期,MySQL主從同步我們已經部署完成,接下來,我們開始部署本期的核心---MMM高可用叢集 四、MMM高可用叢集部署 1、安裝依賴包 由於mmm 是用perl語言寫的指令碼程式,因此需要在5臺伺
kafka_0.11.0.0叢集部署
1. 簡介 kafka (官網地址:http://kafka.apache.org)是一款分散式訊息釋出和訂閱的系統,具有高效能和高吞吐率。 i. 訊息的釋出(publish)稱作producer,訊息的訂閱(subscribe)稱作consumer,中間的儲存陣列稱作brok