1.节点规划

master节点:192.168.188.135

node   节点:(node1)192.168.188.136,(node2)192.168.188.137

2.禁用SELinux

 [root@localhost ~]# setenforce 0

[非必须]彻底禁用SELinux

修改配置文件 /etc/selinux/config,修改

SELINUX=enforcing

SELINUX=disabled

3.禁用firewalld

 [root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld

4.同步系统时间

将三台服务器的时间通过 NTP 进行同步

 [root@localhost ~]# ntpdate -u cn.pool.ntp.org

5.etcd 集群配置

在 Master 节点上面执行以下命令:

 [root@localhost ~]# yum -y install kubernetes-master etcd

修改 etcd 配置文件 /etc/etcd/etcd.conf,修改的代码部分如下:

 #[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
ETCD_LISTEN_PEER_URLS="http://192.168.188.135:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.188.135:2379,http://127.0.0.1:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="etcd1"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.188.135:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.188.135:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.188.135:2380,etcd2=http://192.168.188.136:2380,etcd3=http://192.168.188.137:2380"
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
#ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true
  1. ETCD_LISTEN_PEER_URLS            :指定 etcd 节点监听的 URL,用于与其他分布式 etcd 节点通信,实现各个 etcd 节点的数据通信、交互、选举以及数据同步等功能。
  2. ETCD_LISTEN_CLIENT_URLS          :指定对外提供服务的地址,即 etcd API 的地址,etcd 客户端通过该 URL 访问 etcd 服务器
  3. ETCD_NAME                        :指定 etcd 节点的名称,该名称用于在集群中表示本 etcd 节点
  4. ETCD_INITIAL_ADVERTISE_PEER_URLS :指定节点同伴监听地址,这个值会告诉 etcd 集群中其他 etcd 节点。该地址用来在 etcd 集群中传递数据
  5. ETCD_ADVERTISE_CLIENT_URLS       : 指定当前 etcd 节点对外公告的客户端监听地址,这个值会告诉集群中其他节点。
  6. ETCD_INITIAL_CLUSTER             :列当前 etcd 集群中所有的 etcd 节点的节点通讯地址

在 node1 节点上执行以下命令:

 [root@localhost ~]# yum -y install kubernetes-node etcd flannel docker

修改 etcd 配置文件 /etc/etcd/etcd.conf,修改的代码部分如下:

 #[Member]
#ETCD_CORS=""
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
ETCD_LISTEN_PEER_URLS="http://192.168.188.136:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.188.136:2379,http://127.0.0.1:2379"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
ETCD_NAME="etcd2"
#ETCD_SNAPSHOT_COUNT="100000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
#ETCD_QUOTA_BACKEND_BYTES="0"
#ETCD_MAX_REQUEST_BYTES="1572864"
#ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.188.136:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.188.136:2379"
#ETCD_DISCOVERY=""
#ETCD_DISCOVERY_FALLBACK="proxy"
#ETCD_DISCOVERY_PROXY=""
#ETCD_DISCOVERY_SRV=""
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.188.135:2380,etcd2=http://192.168.188.136:2380,etcd3=http://192.168.188.137:2380"
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
#ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_STRICT_RECONFIG_CHECK="true"
#ETCD_ENABLE_V2="true"

在 node2 节点上执行与 node1 相同操作,注意 /etc/etcd/etcd.conf 要修改相应 ip

配置完成后在三个节点上分别执行如下命令,以启用和启动 etcd 服务:

 [root@localhost ~]# systemctl enable etcd
[root@localhost ~]# systemctl start etcd

启动后,查看 etcd 服务状态:

 [root@localhost ~]# systemctl status etcd

etcd 提供的 etcd 命令可以查看 etcd 集群的健康状态,如下:

 [root@localhost ~]# etcdctl cluster-health
member 7e33cb58132b284f is healthy: got healthy result from http://192.168.188.135:2379
member aa5c1227d8011cfc is healthy: got healthy result from http://192.168.188.136:2379
member e159bd761a0249b1 is healthy: got healthy result from http://192.168.188.137:2379
cluster is healthy

6.Master节点配置

Master 节点上运行着 apiserver、controller-mannager 以及 scheduler 等主要的服务进程。以上服务的配置文件都位于 /etc/kubernetes 目录中。

修改 /etc/kubernetes/apiserver:

 ###
# kubernetes system config
#
# The following values are used to configure the kube-apiserver
# # The address on the local server to listen to.
# KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"
# KUBE_API_ADDRESS 表示 api-server 进程绑定的 IP 地址
# 设置为 0.0.0.0 表示绑定本机所有 IP 地址
KUBE_API_ADDRESS="--address=0.0.0.0"
# The port on the local server to listen on.
KUBE_API_PORT="--port=8080" # Port minions listen on
# KUBELET_PORT="--kubelet-port=10250" # Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.188.135:2379,http://192.168.188.136:2379,http://192.168.188.137:2379" # Address range to use for services
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" # default admission control policies
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota" # Add your own!
KUBE_API_ARGS=""
  1. KUBE_API_ADDRESS  :表示 api-server 进程绑定的 IP 地址
  2. KUBE_API_PORT     :表示 api-server 进程监听的端口。
  3. KUBE_ETCD_SERVERS : 指定 etcd 集群中的每个节点的地址。

启动 Master 节点上面的各项服务:

 [root@localhost ~]# systemctl start kube-apiserver
[root@localhost ~]# systemctl start kube-controller-manager
[root@localhost ~]# systemctl start kube-scheduler

查看服务状态:

 [root@localhost ~]# systemctl status kube-apiserver
[root@localhost ~]# systemctl status kube-controller-manager
[root@localhost ~]# systemctl status kube-scheduler

设置各项服务在 Linux 系统启动时自启动:

 [root@localhost ~]# systemctl enable kube-apiserver
[root@localhost ~]# systemctl enable kube-controller-manager
[root@localhost ~]# systemctl enable kube-scheduler

Kubernetes 的 api-server 提供的各个接口都是 RESTful 的,用户可以通过浏览器访问 Master 节点的 8080 端口,api-server 会以 JSON 对象的形式返回各个 API 的地址:

7.node 节点配置(以node1为例)

Node 节点上主要运行 kube-proxy 和 kubelet 等进程。需要修改三个文件:

修改 Kubernetes 全局配置文件:/etc/kubernetes/config,主要修改 KUBE_MASTER 选项,指定 apiserver的地址:

 ###
# kubernetes system config
#
# The following values are used to configure various aspects of all
# kubernetes services, including
#
# kube-apiserver.service
# kube-controller-manager.service
# kube-scheduler.service
# kubelet.service
# kube-proxy.service
# logging to stderr means we get it in the systemd journal
KUBE_LOGTOSTDERR="--logtostderr=true" # journal message level, 0 is debug
KUBE_LOG_LEVEL="--v=0" # Should this cluster be allowed to run privileged docker containers
KUBE_ALLOW_PRIV="--allow-privileged=false" # How the controller-manager, scheduler, and proxy find the apiserver
KUBE_MASTER="--master=http://192.168.188.135:8080"

修改 /etc/kubernetes/kubelet:

  1. KUBELET_ADDRESS    :指定 kubelet 绑定的 IP 地址,如果想绑定本机所有的网络接口,可以设置为 0.0.0.0
  2. KUBELET_HOSTNAME   :本节点主机名
  3. KUBELET_API_SERVER :指定 apiserver 的地址
 ###
# kubernetes kubelet (minion) config # The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
KUBELET_ADDRESS="--address=127.0.0.1" # The port for the info server to serve on
# KUBELET_PORT="--port=10250" # You may leave this blank to use the actual hostname
# KUBELET_HOSTNAME="--hostname-override=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=192.168.188.136" # location of the api-server
# KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"
KUBELET_API_SERVER="--api-servers=http://192.168.188.135:8080" # pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" # Add your own!
KUBELET_ARGS=""
~

修改 /etc/kubernetes/proxy 文件 :

 ###
# kubernetes proxy config # default config should be adequate # Add your own!
# KUBE_PROXY_ARGS=""
KUBE_PROXY_ARGS="0.0.0.0"

配置完成,配置 自启动,并且启动服务:

[root@localhost kubernetes]# systemctl enable kube-proxy
[root@localhost kubernetes]# systemctl enable kubelet [root@localhost kubernetes]# systemctl start kube-proxy
[root@localhost kubernetes]# systemctl start kubelet

在 node2 上同样操作。

8.测试集群是否正常

 [root@localhost ~]# kubectl get nodes,cs
NAME STATUS AGE
no/192.168.188.135 Ready 23h
no/192.168.188.136 Ready 22h
no/192.168.188.137 Ready 22h NAME STATUS MESSAGE ERROR
cs/controller-manager Healthy ok
cs/scheduler Healthy ok
cs/etcd-1 Healthy {"health":"true"}
cs/etcd-2 Healthy {"health":"true"}
cs/etcd-0 Healthy {"health":"true"}

参考书目:

《从Docker到kuberbetes入门与实战》, 罗利民 著,清华大学出版社,2019,ISBN 978-7-302-53481-5

搭建 Kubernetes 集群的更多相关文章

  1. kubeadm搭建kubernetes集群之三:加入node节点

    在上一章<kubeadm搭建kubernetes集群之二:创建master节点>的实战中,我们把kubernetes的master节点搭建好了,本章我们将加入node节点,使得整个环境可以 ...

  2. kubeadm搭建kubernetes集群之二:创建master节点

    在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...

  3. kubeadm 搭建kubernetes集群环境

    需求 kubeadm 搭建kubernetes集群环境 准备条件 三台VPS(本文使用阿里云香港 - centos7.7) 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell) 安装步骤 ...

  4. kubeadm搭建kubernetes集群之一:构建标准化镜像

    使用docker可以批量管理多个容器,但都是在同一台电脑内进行的,这在实际生产环境中是不够用的,如何突破单机的限制?让多个电脑上的容器可以像单机上的docker-compose.yml管理的那样方便呢 ...

  5. 二进制搭建Kubernetes集群(最新v1.16.0版本)

    目录 1.生产环境k8s平台架构 2.官方提供三种部署方式 3.服务器规划 4.系统初始化 5.Etcd集群部署 5.1.安装cfssl工具 5.2.生成etcd证书 5.2.1 创建用来生成 CA ...

  6. 【Kubernetes学习笔记】-kubeadm 手动搭建kubernetes 集群

    目录 K8S 组件构成 环境准备 (以ubuntu系统为例) 1. kubernetes集群机器 2. 安装 docker. kubeadm.kubelet.kubectl 2.1 在每台机器上安装 ...

  7. 手把手从0到1:搭建Kubernetes集群

    搭建 k8s 集群网上很多教程,如果是手工部署或者实验环境可以直接使用 MiniKube 或者 Kind,来在本地启动简单的 Kubernetes 集群进行后面的学习即可.如果是使用 MiniKube ...

  8. 使用Kubeadm(1.13+)快速搭建Kubernetes集群

    Kubeadm是管理集群生命周期的重要工具,从创建到配置再到升级,Kubeadm处理现有硬件上的生产集群的引导,并以最佳实践方式配置核心Kubernetes组件,以便为新节点提供安全而简单的连接流程并 ...

  9. 通过Kubeadm搭建Kubernetes集群

    历经断断续续学习的两天,终于完成了一个简单k8s集群. 参考 https://www.cnblogs.com/edisonchou/p/aspnet_core_on_k8s_deepstudy_par ...

  10. centos7使用kubeadm搭建kubernetes集群

    一.本地实验环境准备 服务器虚拟机准备 IP CPU 内存 hostname 192.168.222.129 >=2c >=2G master 192.168.222.130 >=2 ...

随机推荐

  1. JavaScript系列之回调函数callback

    JavaScript系列之回调函数callback JavaScript回调函数的使用是很常见的,引用官方回调函数的定义: A callback is a function that is passe ...

  2. 体验.NET Core 命令行应用程序-CommandLineUtils

    前言 在我们开发中可能需要设计一次性应用程序,这些实用程序可以利用接近原始源代码的优势,但可以在与主Web应用程序完全独立的安全性上下文中启动.具体在 [管理过程](https://12factor. ...

  3. Java爬虫一键爬取结果并保存为Excel

    Java爬虫一键爬取结果并保存为Excel 将爬取结果保存为一个Excel表格 官方没有给出导出Excel 的教程 这里我就发一个导出为Excel的教程 导包 因为个人爱好 我喜欢用Gradle所以这 ...

  4. echarts设置柱状图颜色渐变及柱状图粗细大小

    series: [ { name: '值', type: 'bar', stack: '总量', //设置柱状图大小 barWidth : 20, //设置柱状图渐变颜色 itemStyle: { n ...

  5. 如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出

    这是该系列的第一篇文章:在ASP.NET Core 3.0中使用Serilog.AspNetCore. 第1部分-使用Serilog RequestLogging来简化ASP.NET Core的日志输 ...

  6. java jdk9的特性 jshell

    1.进入 jshell 2.推出 /exit() 和python的解释器用法差不多

  7. C++中的四个智能指针

    只能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象.智能指针定义在memory头文件中. 1. auto_ptr(C++11已经舍弃) 由new expression获得的对象,在au ...

  8. 解决delete 删除sql语句,标识还保留删除之前的问题

    我有一些数据,想要删除,首先想到的是delete,但是它会保留之前的标识,后来想用truncate来进行删除,但是,它会全部删除,并且不能加条件,只能回过头使用delete,以下是解决delete删除 ...

  9. requests快速构造请求头的方法

    上图请求头内容,内容多不说,也不确认哪些数据是必须的,网上找到一个懒办法 快速一键生成 Python 爬虫请求头 实战演练 抓取网站:https://developer.mozilla.org... ...

  10. 史上最详细的二叉树、B树,看不懂怨我

    今天我们要说的红黑树就是就是一棵非严格均衡的二叉树,均衡二叉树又是在二叉搜索树的基础上增加了自动维持平衡的性质,插入.搜索.删除的效率都比较高.红黑树也是实现 TreeMap 存储结构的基石. 1.二 ...