1. 程式人生 > >kubernetes v1.12.0叢集部署(二進位制方式+基於CA簽名雙向數字證書認證方式)

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.0how & 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