1. 程式人生 > >kubeadm部署高可用叢集Kubernetes 1.14.1版本

kubeadm部署高可用叢集Kubernetes 1.14.1版本

 Kubernetes高可用叢集部署

部署架構:

Master 元件:

  • kube-apiserver

Kubernetes API,叢集的統一入口,各元件協調者,以HTTP API提供介面服務,所有物件資源的增刪改查和監聽操作都交給APIServer處理後再提交給Etcd儲存。

  • kube-controller-manager

處理叢集中常規後臺任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的。

  • kube-scheduler

根據排程演算法為新建立的Pod選擇一個Node節點。


Node 元件:

  • kubelet

kubelet是Master在Node節點上的Agent,管理本機執行容器的生命週期,比如建立容器、Pod掛載資料卷、
下載secret、獲取容器和節點狀態等工作。kubelet將每個Pod轉換成一組容器。

  • kube-proxy

在Node節點上實現Pod網路代理,維護網路規則和四層負載均衡工作。

  • docker

執行容器。
第三方服務:

  • etcd

分散式鍵值儲存系統。用於保持叢集狀態,比如Pod、Service等物件資訊。

下圖清晰表明了Kubernetes的架構設計以及元件之間的通訊協議。

 

 

 

一、環境規劃 

 

角色

 IP

 元件

K8S-MASTER01

10.247.74.48

kube-apiserver
kube-controller-manager
kube-scheduler
etcd

kubelet
kube-proxy

flannel

Nginx

keepalived

K8S-MASTER02

10.247.74.49

kube-apiserver
kube-controller-manager
kube-scheduler
etcd

kubelet
kube-proxy

flannel

Nginx

keepalived

K8S-MASTER03

10.247.74.50

kube-apiserver
kube-controller-manager
kube-scheduler
etcd

kubelet
kube-proxy

flannel

Nginx

keepalived

K8S-NODE01

10.247.74.53

kubelet
kube-proxy
docker
flannel

K8S-NODE02

10.247.74.54

kubelet
kube-proxy
docker
flannel

K8S-NODE03

10.247.74.55

kubelet
kube-proxy
docker
flannel

K8S-NODE04

10.247.74.56

kubelet
kube-proxy
docker
flannel

K8S-VIP

10.247.74.51

 

軟體版本資訊

 

軟體

版本

Linux作業系統

Red Hat Enterprise 7.6_x64

Kubernetes

1.14.1

Docker

18.06.3-ce

Etcd

3.0

Nginx

17.0

1.1系統環境準備(所有節點)

#設定主機名及關閉selinux,swap分割槽

cat <<EOF >>/etc/hosts

10.247.74.48  TWDSCPA203V

10.247.74.49  TWDSCPA204V

10.247.74.50  TWDSCPA205V

10.247.74.53  TWDSCPA206V

10.247.74.54  TWDSCPA207V

10.247.74.55  TWDSCPA208V

10.247.74.56  TWDSCPA209V

10.247.74.51  K8S-VIP

EOF

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

swapoff -a

sed -i 's/\/dev\/mapper\/centos-swap/\#\/dev\/mapper\/centos-swap/g' /etc/fstab

systemctl enable ntpd

systemctl start ntpd 

#設定核心引數

echo "* soft nofile 32768" >> /etc/security/limits.conf

echo "* hard nofile 65535" >> /etc/security/limits.conf

echo "* soft nproc 32768" >> /etc/security/limits.conf

echo "* hadr nproc 65535" >> /etc/security/limits.conf

cat > /etc/sysctl.d/k8s.conf <<EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_nonlocal_bind = 1

net.ipv4.ip_forward = 1

vm.swappisysctl --system

ness=0

EOF

sysctl --system

sysctl -p

#載入IPVS模組

在所有的Kubernetes節點執行以下指令碼(若核心大於4.19替換nf_conntrack_ipv4為nf_conntrack):

cat > /etc/sysconfig/modules/ipvs.modules <<EOF

#!/bin/bash

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack_ipv4

EOF

#執行指令碼

chmod 755  /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

#安裝ipvs相關管理軟體

yum install ipset ipvsadm -y
reboot

1.2安裝Docker(所有節點)

# Step 1: 安裝必要的一些系統工具

yum install -y yum-utils device-mapper-persistent-data lvm2

#sSep 2:安裝ddocker

yum update -y && yum install -y docker-ce-18.06.3.ce

# Step 3: 配置docker倉庫及映象存放路徑

mkdir -p /mnt/sscp/data/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [ "https://registry.docker-cn.com"],
"insecure-registries":["172.31.182.143"],
"graph": "//mnt/sscp/data/docker"
}
EOF

# Step 4: 重啟啟Docker服務

systemctl restart docker
systemctl enable docker 

1.3部署Nginx

一、安裝依賴包
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
二、從官網下載安裝包
wget https://nginx.org/download/nginx-1.16.0.tar.gz
三、解壓並安裝
tar zxvf nginx-1.16.0.tar.gz
cd nginx-1.16.0
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module--with-stream --with-stream_ssl_module
make && make install
四、配置kube-apiserver反向代理
stream {
   log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    access_log  /var/log/nginx/k8s-access.log  main;
upstream k8s-apiserver {
    server 10.247.74.48:6443;
    server 10.247.74.49:6443;
    server 10.247.74.50:6443;
}
server {
        listen 0.0.0.0:8443;
        proxy_pass k8s-apiserver;
}
}
五、啟動nginx服務
/usr/local/sbin/nginx

1.4部署keepalived

一、下載地址:

wget https://www.keepalived.org/software/keepalived-2.0.16.tar.gz
二、解壓並安裝

tar xf keepalived-2.0.16.tar.gz

cd keepalived-2.0.16

./configure --prefix=/usr/local/keepalived

make && make install

cp /root/keepalived-2.0.16/keepalived/etc/init.d/keepalived /etc/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

二、新增配置檔案

vim /etc/keepalived/keepalived.conf

MASTER:

vrrp_instance VI_1 {

    state MASTER

    interface ens32    

    virtual_router_id 51

    priority 100   

    advert_int 1   

    authentication {

        auth_type PASS     

        auth_pass 1111

    } 

    virtual_ipaddress {

        10.247.74.51/24

    }

BACKUP:

vrrp_instance VI_1 {

    state BACKUP

    interface ens32    

    virtual_router_id 51

    priority 90   

    advert_int 1   

    authentication {

        auth_type PASS     

        auth_pass 1111

    } 

    virtual_ipaddress {

        10.247.74.51/24

    }

1.5部署kubeadm(所有節點)

以下操作在所有節點執行。

#由於官方源國內無法訪問,這裡使用阿里雲yum源進行替換:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

#安裝kubeadm、kubelet、kubectl,注意這裡安裝版本v1.14.1:

yum install -y kubelet-1.14.1 kubeadm-1.14.1 kubectl-1.14.1
systemctl enable kubelet && systemctl start kubelet

1.6部署Master節點

初始化參考: https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/ https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1

建立初始化配置檔案 可以使用如下命令生成初始化配置檔案

kubeadm config print init-defaults > kubeadm-config.yaml

根據實際部署環境修改資訊:

apiVersion: kubeadm.k8s.io/v1beta1
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 10.247.74.48
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: cn-hongkong.i-j6caps6av1mtyxyofmrw
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta1
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "10.247.74.51:8443"
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.14.1
networking:
  dnsDomain: cluster.local
  podSubnet: "10.244.0.0/16"
  serviceSubnet: 10.96.0.0/12
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
  SupportIPVSProxyMode: true
mode: ipvs

配置說明:

controlPlaneEndpoint:為vip地址和haproxy監聽埠6444
imageRepository:由於國內無法訪問google映象倉庫k8s.gcr.io,這裡指定為阿里雲映象倉庫registry.aliyuncs.com/google_containers
podSubnet:指定的IP地址段與後續部署的網路外掛相匹配,這裡需要部署flannel外掛,所以配置為10.244.0.0/16
mode: ipvs:最後追加的配置為開啟ipvs模式。

在叢集搭建完成後可以使用如下命令檢視生效的配置檔案:

kubeadm  config images pull  --config kubeadm-config.yaml  # 通過阿里源預先拉映象

初始化Master01節點

這裡追加tee命令將初始化日誌輸出到kubeadm-init.log中以備用(可選)。

kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log

該命令指定了初始化時需要使用的配置檔案,其中新增–experimental-upload-certs引數可以在後續執行加入節點時自動分發證書檔案。 

1.7新增其他Master節點

執行以下命令:

kubeadm join 10.247.74.51:8443 --token ocb5tz.pv252zn76rl4l3f6 \
--discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2 \
--experimental-control-plane --certificate-key 20366c9cdbfdc1435a6f6d616d988d027f2785e34e2df9383f784cf61bab9826

新增上下文:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

1.8新增Node節點

執行以下命令:

kubeadm join 10.247.74.51:8443 --token ocb5tz.pv252zn76rl4l3f6 \
    --discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2

1.9部署flannel並查詢叢集狀態

一、部署flannel

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

二、檢視叢集狀態

# kubectl get node

1.10後續

token預設24h後失效如果有新的node加入可在master上重新生成:

kubeadm token create --print-join-command
            
           

相關推薦

kubeadm部署可用叢集Kubernetes 1.14.1版本

 Kubernetes高可用叢集部署 部署架構: Master 元件: kube-apiserver Kubernetes API,叢集的統一入口,各元件協調者,以HTTP API提供介面服務,所有物件資源的增刪改查和監聽操作都交給APIServer處理後再提交給Etcd儲存。

再探使用kubeadm部署可用的k8s集群-01引言

data- mode etcd [1] working -s device master 基本 再探使用kubeadm部署高可用的k8s集群-01引言 2018/1/26 提示 僅供測試用途前言:高可用一直是重要的話題,需要持續研究。最近關註到 k8s 官網文檔有更新,其中

keepalive軟體部署 可用叢集(HA)

使用keepalive軟體部署 高可用叢集(HA) keepalived軟體可以做任意單點故障節點的高可用叢集 把網站伺服器66和67配置為HA叢集,正在被使用者訪問的主機66做主,67做備份伺服器 使用目標:當網站伺服器64宕機後,網站伺服器65自動響應客戶端訪問網站

使用開源Breeze工具部署Kubernetes 1.12.1可用叢集_Kubernetes中文社群

Breeze專案是深圳睿雲智合所開源的Kubernetes圖形化部署工具,大大簡化了Kubernetes部署的步驟,其最大亮點在於支援全離線環境的部署,且不需要翻牆獲取Google的相應資源包,尤其適合某些不便訪問網際網路的伺服器場景。(專案地址 https://github.com/wise

[K8s 1.9實踐]Kubeadm 1.9 HA 可用 叢集 本地離線映象部署_Kubernetes中文社群

Kubeadm HA 1.9 高可用 叢集 本地離線部署 k8s介紹 k8s 發展速度很快,目前很多大的公司容器叢集都基於該專案,如京東,騰訊,滴滴,瓜子二手車,北森等等。 kubernetes1.9版本釋出2017年12月15日,每是那三個月一個迭代, Workloads API成為穩定版本,這消除

基於 Ansible 快速部署 kubernetes 1.10.4 HA 可用叢集

一、背景       菜鳥只是拿來試試,順便記錄下過程。二、部署過程2.1  準備機器      本次實驗準備了4臺虛機,192.168.5.201~204 ,主機名 node-01 ~ node-04      node-01 當作部署機,node-01~02 作為 Mas

kubeadm安裝可用kubernetes v1.14.1

root rec nload 環境 ret token reat iptable wall 前言 步驟跟之前安裝1.13版本的是一樣的 區別就在於kubeadm init的configuration file 目前kubeadm init with configura

使用kubeadm進行單master(single master)和可用(HA)kubernetes叢集部署

kubeadm部署k8s 使用kubeadm進行k8s的部署主要分為以下幾個步驟: 環境預裝: 主要安裝docker、kubeadm等相關工具。 叢集部署: 叢集部署分為single master(單master,只有一個master節點)和高可用HA叢集部署兩種模式。主要部署k8s的相關元件。本文將分別做

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

使用kuberspay部署可用kubernetes叢集

0 環境 環境: 主機名 IP k8s-node01 172.16.120.151 k8s-node02 172.16.120.152 k8s-node03 172.16.120.153

k8s(一)、 1.9.0可用叢集本地離線部署記錄

一、部署說明 1.節點 master1: IP:192.168.0.170/24 hostname:171 master2: IP:192.168.0.171/24 hostname:172 VIP:192.168.0.169/24 2.工具版

Kubernetes叢集部署可用Harbor映象倉庫

一、實驗環境 harbor的工作節點 10.142.71.120 paasm1 10.142.71.121 paasm2 10.142.71.123 paashar 作業系統:CentOS Linux release 7.2.1511 (Core)

使用kubespray部署可用kubernetes叢集

0 環境環境:主機名IPk8s-node01172.16.120.151k8s-node02172.16.120.152k8s-node03172.16.120.153ansible-client設定主機名:hostnamectl --static set-hostname

.Net Core2.1 秒殺專案一步步實現CI/CD(Centos7.2)系列一:k8s可用叢集搭建總結以及部署API到k8s

前言:本系列部落格又更新了,是博主研究很長時間,親自動手實踐過後的心得,k8s叢集是購買了5臺阿里雲伺服器部署的,這個叢集差不多搞了一週時間,關於k8s的知識點,我也是剛入門,這方面的知識建議參考部落格園大神edisonchou的系列文章《.NET Core on K8S學習實踐系列文章索引(Draft版)》

kubernetes叢集部署可用Postgresql的Stolon方案

目錄 前言 ....前言 本文選用Stolon的方式搭建Postgresql高可用方案,主要為Harbor提供高可用資料庫,Harbor搭建可檢視kubernetes搭建Harbor無坑及Harbor倉庫同步,之後會提供redis高可用及Harbor高可用方案搭建 方案比較 幾種postgresql高可用方案

kubeadm實現k8s可用叢集環境部署與配置

# 高可用架構 k8s叢集的高可用實際是**k8s各核心元件**的**高可用**,這裡使用**主備模式**,架構如下: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200602143045152.png?x-oss-process=image/watermark,ty

部署一套完整的Kubernetes可用叢集(二進位制,v1.18版)

一、前置知識點 1.1 生產環境可部署Kubernetes叢集的兩種方式 目前生產部署Kubernetes叢集主要有兩種方式: kubeadm Kubeadm是一個K8s部署工具,提供kubeadm init和kubeadm join,用於快速部署Kubernetes叢集。 官方地址:https://ku

一文吃透如何部署kubernetes可用叢集

使用 k8s 官方提供的部署工具 kubeadm 自動安裝,需要在 master 和 node 節點上安裝 docker 等元件,然後初始化,把管理端的控制服務和 node 上的服務都以 pod 的方式執行。 kubernetes部署過程: 本次部署的叢集是v1.17.2 分為以下幾個步驟 1.基礎環境

Kubernetes實戰 可用叢集搭建,配置,運維與應用

1-1 K8S導學 1-2 搭建K8S叢集步驟和要點介紹 1-3 搭建三節點Ubuntu環境 1-4 安裝容器引擎 1-5 下載Kubeadm、node元件和命令列工具 1-6 向叢集中加入worker節點 1-7 安裝dashboard和heapste

Flume NG可用叢集搭建詳解(基於flume-1.7.0)

1、Flume NG簡述 Flume NG是一個分散式,高可用,可靠的系統,它能將不同的海量資料收集,移動並存儲到一個數據儲存系統中。輕量,配置簡單,適用於各種日誌收集,並支援 Failover和負載均衡。並且它擁有非常豐富的元件。Flume NG採用的是三層架構:Agent層,Collecto