准备工作

安装CentOS7虚拟机

安装Docker

关闭CentOS7自带的防火墙服务

systemctl disable firewalld
systemctl stop firewalld

修改主机名

vim /etc/hostname
  • k8s-master01(对应主机ip:192.168.91.129)
  • k8s-worker01(对应主机ip:192.168.91.130)
  • k8s-worker02(对应主机ip:192.168.91.131)

配置ip地址

配置3台测试机的/etc/hosts文件(在三台服务器上同步)
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.91.129 k8s-master01
192.168.91.130 k8s-worker01
192.168.91.131 k8s-worker02

获取源文件

(主从节点都需要)wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(主从节点都需要)rpm --import rpm-package-key.gpg
(主节点)yum repolist
(主节点)新建和编辑repo文件:
vim /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
(主节点)
cd /etc/yum.repos.d
scp CentOS-Base.repo docker-ce.repo kubernetes.repo k8s-worker01:/etc/yum.repos.d/
scp CentOS-Base.repo docker-ce.repo kubernetes.repo k8s-worker02:/etc/yum.repos.d/

安装Kubernetes

修改/etc/docker/daemon.json
添加:"exec-opts": ["native.cgroupdriver=systemd"](用于消除安装k8s集群时的警告)

重启docker

systemctl daemon-reload
systemctl restart docker

主从节点安装Kubernetes组件镜像(指定为v1.17.6版本)

更新缓存(主从节点都需要)
yum clean all
yum -y makecache
(若是执行第二步的时候报错:Cannot find a valid baseurl for repo: base/7/x86_64,则检查一下网络问题)
验证源是否可用
  yum list | grep kubeadm(如果提示要验证yum-key.gpg是否可用,输入y)
主从节点安装k8s-1.17.6:yum install -y kubelet-1.17.6-0 kubeadm-1.17.6-0 kubectl-1.17.6-0

配置、启动kubelet并设置开机启动(主从节点都需要)

查看相关配置:rpm -ql kubelet
其中,/etc/kubernetes/manifests 为清单目录,/etc/sysconfig/kubelet 为配置文件,/usr/lib/systemd/system/kubelet.service 为主程序。
增加配置信息:
vim /etc/sysconfig/kubelet
  KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
  KUBELET_EXTRA_ARGS="--fail-swap-on=false"(直接关闭交换分区会导致虚拟机内存资源紧张,故直接配置忽略swap报错,这样在 kubeadm init 的时候,kubelet才能正常运行)
启动kubelet并设置开机启动(这里可以不执行启动命令,在主节点初始化时/从节点加入集群时会启动kubelet)
  systemctl enable kubelet

导入k8s及相关docker镜像

集群初始化镜像

先手动将集群初始化镜像文件k8sv1.17.6.tar上传到各个节点的/root目录下
进入各个节点tar所在目录,使用如下命令导入镜像
docker load -i k8sv1.17.6.tar

集群初始化网络镜像

先手动将集群网络组件calico(calico3.13.2.tar,一套开源的网络和网络安全方案)上传到各个节点的/root目录下,集群所有节点都需要导入

导入calico.yml

k8s集群需要的网络插件为3.13版本,集群所有节点都需要导入
cd /root
若出现以下报错,则执行:yum install -y ca-certificates

初始化k8s集群

初始化master节点

kubeadm init --apiserver-advertise-address=192.168.91.129 --kubernetes-version v1.17.6 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.81.0.0/16 --image-repository=registry.aliyuncs.com/google_containers --ignore-preflight-errors=Swap
若出现以下错误:
W0222 21:17:31.258353 10153 validation.go:28] Cannot validate kube-proxy config - no validator is available
W0222 21:17:31.258577 10153 validation.go:28] Cannot validate kubelet config - no validator is available
[init] Using Kubernetes version: v1.17.6
[preflight] Running pre-flight checks
[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[WARNING Swap]: running with swap on is not supported. Please disable swap
[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 20.10.12. Latest validated version: 19.03
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...
To see the stack trace of this error execute with --v=5 or higher
根据报错信息可知,是因为:/proc/sys/net/bridge/bridge-nf-call-iptables 和 /proc/sys/net/ipv4/ip_forward 的内容没有被设置为1
执行以下两条命令即可:
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1" >/proc/sys/net/ipv4/ip_forward
按照提示在master执行如下操作
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

worker节点加入集群

kubeadm join 192.168.91.129:6443 --token chijon.vjnq37z0titsxbmc --discovery-token-ca-cert-hash sha256:eca67b2c5ae245a6f203bc7de1030828e0f0d9fbdd5e9a640b83ab22a9d39609 --ignore-preflight-errors=Swap
 
若不加这段:--ignore-preflight-errors=Swap,则可能会出现如下报错:
[ERROR Swap]: running with swap on is not supported. Please disable swap

查看集群搭建结果

kubectl get nodes
由于还没有进行网络配置,故集群所有节点的状态为:NotReady
worker节点上面更是会直接报错:
运行 出现 The connection to the server localhost:8080 was refused - did you specify the right host or port? 的错误
  • 出现这个问题的原因是kubectl命令需要使用kubernetes-admin来运行,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后配置环境变量
    • echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
    • source ~/.bash_profile
  • 如果某个节点的/etc/kubernetes目录下没有admin.conf这个配置文件,则直接将主节点上的配置文件复制过去

网络安装(主从都需要)

cd /root
kubectl apply -f calico.yaml

kubectl命令自动补全

echo "source <(kubectl completion bash)" >> ~/.bash_profilesource ~/.bash_profile

再次查看集群搭建结果

kubectl get nodes
k8s-master01
可以看到集群所有节点的状态为:Ready
若某台虚拟机关机或断网了,则状态会变为 NotReady,重启或联网之后会自动加入集群,变为 Ready

k8s集群搭建过程详解的更多相关文章

  1. Nacos集群搭建过程详解

    Nacos的单节点,也就是我们最开始使用的standalone模式,配置的数据是默认存储到内嵌的数据库derby中. 如果我们要搭建集群的话,那么肯定是不能用内嵌的数据库,不然数据无法共享.集群搭建的 ...

  2. hadoop1.2.1+zk-3.4.5+hbase-0.94.1集群安装过程详解

    hadoop1.2.1+zk-3.4.5+hbase-0.94.1集群安装过程详解 一,环境: 1,主机规划: 集群中包括3个节点:hadoop01为Master,其余为Salve,节点之间局域网连接 ...

  3. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  4. RabbitMQ 集群安装过程详解

    一.安装Erlang 1.rabbitMQ是基于erlang的,所以首先必须配置erlang环境. 从erlang官网下载 otp 18.3.下载链接:http://erlang.org/downlo ...

  5. 懒人记录 Hadoop2.7.1 集群搭建过程

    懒人记录 Hadoop2.7.1 集群搭建过程 2016-07-02 13:15:45 总结 除了配置hosts ,和免密码互连之外,先在一台机器上装好所有东西 配置好之后,拷贝虚拟机,配置hosts ...

  6. t持久化与集群部署开发详解

    Quartz.net持久化与集群部署开发详解 序言 我前边有几篇文章有介绍过quartz的基本使用语法与类库.但是他的执行计划都是被写在本地的xml文件中.无法做集群部署,我让它看起来脆弱不堪,那是我 ...

  7. 深入浅出—Redis集群的相关详解

    前言: 这篇文章主要介绍了Redis集群的相关,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 注意!要求使用的都是redis3.0以上的版本,因为3.0以上增加了red ...

  8. 分布式实时日志系统(一)环境搭建之 Jstorm 集群搭建过程/Jstorm集群一键安装部署

    最近公司业务数据量越来越大,以前的基于消息队列的日志系统越来越难以满足目前的业务量,表现为消息积压,日志延迟,日志存储日期过短,所以,我们开始着手要重新设计这块,业界已经有了比较成熟的流程,即基于流式 ...

  9. ZooKeeper集群搭建过程

    ZooKeeper集群搭建过程 提纲 1.ZooKeeper简介 2.ZooKeeper的下载和安装 3.部署3个节点的ZK伪分布式集群 3.1.解压ZooKeeper安装包 3.2.为每个节点建立d ...

随机推荐

  1. 模块和包—Day28

    一.模块 模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. import的过程:import一个模块的时候,首先创建一个属于my_module的内存空间,加载my_ ...

  2. rar解压密码破解软件工具下载

    软件已激活,下载即可使用 下载地址: https://dl.winzf.com/25_794.html 软件介绍现在市面商的rar压缩包破解软件的原理都是,输入密码一个一个尝试,然后得出压缩包正确密码 ...

  3. 探秘inter()方法

    最近在阅读<深入理解Jav虚拟机>的运行时常量池章节,看到"java语言并不要求常量池一定只有编译器才能产生...运行期间也可以将新的常量放入常量池,这种特性被开发人员利用得比较 ...

  4. Wireshark教程之过滤器设置

    实验目的 1.工具介绍 2.主要应用 实验原理 1.网络管理员用来解决网络问题 2.网络安全工程师用来检测安全隐患 3.开发人员用来测试执行情况 4.学习网络协议 实验内容 1.抓取特定数据流 2.显 ...

  5. Dell服务器配置RAID1+RAID0磁盘阵列

    有台DELL R730的服务器,需要部署下公司的程序,这里记录下raid配置. 环境要求 两块硬盘做raid 1 一块硬盘做raid 0 服务器开机,开始配置raid 服务器开机,在出现下图提示时,同 ...

  6. 【C# Task】 ValueTask/Task<TResult>

    概要 1.如果异步方法的使用者使用 Task.WhenAll 或 Task.WhenAny,则在异步方法中使用 ValueTask<T> 作为返回类型可能会产生高昂的成本.这是因为您需要使 ...

  7. 【C# Task】开篇

    概览 在学task类之前必须学习线程的知识. 以下是task命名空间的类的结构图 1.2种任务类型: 有返回值task<TResult> .无返回值task. 2.2座任务工厂 TaskF ...

  8. Hive复杂数组字典(Json-Array)解析

    数据存储字段格式如下(Json-Array互相嵌套): string='{"id":"9088848902695992720","title" ...

  9. Python变量与常见数据类型

    Python变量 变量与常量:有时被通称为变量 变量:通常指代能够产生变化的量,多用以描述事物的变化状态 常量:通常指代稳定不产生变化的量,多用于描述事物的固定状态 # 代码层面的使用 myname ...

  10. Android studio第一个程序HelloWorld

    今天主要跟着视频设计了第一个安卓项目,了解了大改的目录结构 每天会学习线性布局和相对布局