创建三个centos节点:

192.168.5.141 k8s-master
192.168.5.142 k8s-nnode1
192.168.5.143 k8s-nnode2

查看centos系统版本

# cat /etc/centos-release
CentOS Linux release 8.2.2004 (Core) 
备注:第1步~第8步,所有的节点都要操作,第9、10步Master节点操作,第11步Node节点操作。
如果第9、10、11步操作失败,可以通过 kubeadm reset 命令来清理环境重新安装。

1.关闭防火墙

# systemctl stop firewalld

2.关闭selinux

# setenforce 0

3.关闭swap

# nano /etc/fstab ,注释掉swap挂载这一行可以永久关闭swap分区

备注:k8s运行必须关闭掉swap分区

# swapoff -a

4.添加主机名与IP对应的关系

# nano /etc/hosts 添加如下内容:
192.168.5.141 k8s-master
192.168.5.142 k8s-nnode1
192.168.5.143 k8s-nnode2

5.将桥接的IPV4流量传递到iptables 的链

# cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF # sysctl --system

6.安装docker

卸载旧的docker:

# sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# sudo yum install -y docker-ce-3:19.03.15-3.el8 docker-ce-cli-1:19.03.15-3.el8 containerd.io-1.3.9-3.1.el8
# docker --version
Docker version 19.03.15, build 99e3ed8919
修改Cgroupfs 为 Systemd(docker文件驱动默认由cgroupfs 改成 systemd,与k8s保持一致避免conflict):
# cd /etc/
# mkdir docker
# cd docker
# nano daemon.json
或 # cd /etc/ && mkdir docker && cd docker && nano daemon.json
#写入
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
设置开机启动:

# systemctl enable docker && systemctl start docker

查看文件驱动:

# docker info | grep Driver
Storage Driver: overlay2
Logging Driver: json-file
Cgroup Driver: cgroupfs

 安装tc
# yum install tc -y

7.Kubernetes yum源配置:

# nano /etc/yum.repos.d/kubernetes.repo,添加文件内容如下:
[kubernetes]

name=Kubernetes Repo

baseurl=https://mirrors.tuna.tsinghua.edu.cn/kubernetes/yum/repos/kubernetes-el7-x86_64/

gpgcheck=0

enabled=1

8.安装k8s

yum -y install kubelet-1.18.5 kubeadm-1.18.5 kubectl-1.18.5 --disableexcludes=kubernetes
设置k8s开机启动

# systemctl enable kubelet

启动k8s后台daemon

# systemctl start kubelet

9.部署Kubernetes Master

从DockerHub的其它仓库拉取
网上搜了半天,很多人说从别的仓库一个一个拉取再改名,但是这些教程仓库名称不一,有的教程已经很老了,仓库很多年没更新,这里直接授之以渔,自己学怎么找仓库。
并且一个一个拉取改名太累了,可以写个脚本。

过程如下:

首先使用下面的命令获取需要的docker镜像名称:

# kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.18.20
k8s.gcr.io/kube-controller-manager:v1.18.20
k8s.gcr.io/kube-scheduler:v1.18.20
k8s.gcr.io/kube-proxy:v1.18.20
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

注意:新版本的coredns改名了,变成了coredns/coredns,记得在images里面改一下

首先要看看该在哪个地方拉取,可以去docker hub搜一搜哪里有kube-proxy之类的组件
进入dockerhub搜索:
https://hub.docker.com/search?q=kube-proxy&type=image
按照最近更新排序,结果如下,可以发现一个下载次数10k+,更新也很频繁的仓库:

然后开始编写脚本:

# cd /etc/
# mkdir k8s
# cd k8s
# nano pull_k8s_images.sh
或 cd /etc/ && mkdir k8s && cd k8s && nano pull_k8s_images.sh
set -o errexit
set -o nounset
set -o pipefail ##这里定义版本,按照上面得到的列表自己改一下版本号 KUBE_VERSION=v1.18.5
KUBE_PAUSE_VERSION=3.2
ETCD_VERSION=3.4.3-0
DNS_VERSION=1.6.7 ##这是原始仓库名,最后需要改名成这个
GCR_URL=k8s.gcr.io ##这里就是写你要使用的仓库
DOCKERHUB_URL=gotok8s ##这里是镜像列表,新版本要把coredns改成coredns/coredns
images=(
kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${DNS_VERSION}
) ##这里是拉取和改名的循环语句
for imageName in ${images[@]} ; do
docker pull $DOCKERHUB_URL/$imageName
docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName
docker rmi $DOCKERHUB_URL/$imageName
done

然后授予执行权限

# chmod +x ./pull_k8s_images.sh

执行

./pull_k8s_images.sh
执行初始化
kubeadm init  \
--kubernetes-version=1.18.5 \
--apiserver-advertise-address=192.168.5.141 \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16

执行命令之后可以拿到,记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群之前就执行。

kubeadm join 192.168.5.141:6443 --token n1anmw.ubhpjr33jdncdg5b \
     --discovery-token-ca-cert-hash sha256:372c1db40560d9abc307f3882718cfd66d2773bcb377ea60d6cd60eb52717122

根据init后的提示,

增加一个名为k8s的普通系统用户,并设置为可以免密sudo
执行kubeadm初始化master配置时提示的kubectl配置方法

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

查看docker镜像:

# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.18.5 a1daed4e2b60 14 months ago 117MB
k8s.gcr.io/kube-controller-manager v1.18.5 8d69eaf196dc 14 months ago 162MB
k8s.gcr.io/kube-apiserver v1.18.5 08ca24f16874 14 months ago 173MB
k8s.gcr.io/kube-scheduler v1.18.5 39d887c6621d 14 months ago 95.3MB
k8s.gcr.io/pause 3.2 80d28bedfe5d 18 months ago 683kB
k8s.gcr.io/coredns 1.6.7 67da37a9a360 19 months ago 43.8MB
k8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 22 months ago 288MB

由于kube-apiserver默认只启动安全访问接口6443,而不启动非安装访问接口8080,kubectl是通过8080端口访问k8s kubelet的,所以要修改配置文件,使其支持8080端口访问:

# nano /etc/kubernetes/manifests/kube-apiserver.yaml
把–insecure-port=0修改为:
–insecure-port=8080
增加或修改
-insecure-bind-address=0.0.0.0

# systemctl restart kubelet

# sysctl net.bridge.bridge-nf-call-iptables=1
  # kubectl get node

NAME       STATUS   ROLES  AGE VERSION
k8s-master NotReady master 11m v1.18.5

10.安装calico网络

# yum install -y wget
# wget http://download.zhufunin.com/k8s_1.18/calico.yaml
# kubectl apply -f calico.yaml

# kubectl get pods -n kube-system 隔一段时间看一下,STATUS变为ContainerCreating或者Running

再执行

# kubectl get node,此时状态变为Ready

至此,k8s master节点创建完毕。

11.Node节点加入集群(在k8s-nnode1和k8s-nnode2)

# yum install -y wget
# wget http://download.zhufunin.com/k8s_1.18/1-18-pause.tar.gz
# wget http://download.zhufunin.com/k8s_1.18/1-18-kube-proxy.tar.gz
# docker load -i 1-18-pause.tar.gz
# docker load -i 1-18-kube-proxy.tar.gz

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:
复制上面命令,在node节点上执行
在k8s-nnode1和k8s-nnode2都执行刚才拿到的:

#   kubeadm join 192.168.5.141:6443 --token n1anmw.ubhpjr33jdncdg5b \
     --discovery-token-ca-cert-hash sha256:372c1db40560d9abc307f3882718cfd66d2773bcb377ea60d6cd60eb52717122

然后都执行:

kubectl -s http://192.168.5.138:8080 get nodes
mater查看pod

kubectl get pods  kube-proxy-7jmxj  -n kube-system -o wide
kubectl get pods -n kube-system -o wide

node查看连接日志 journalctl -f -u kubelet

如果Node的状态是NotReady,并且日志输出出现Unable to update cni config: No networks found in /etc/cni/net.d

执行 scp -r 192.168.5.141:/etc/cni /etc/cni

iptables --flush
iptables -tnat --flush
systemctl stop firewalld
systemctl disable firewalld
systemctl restart docker
systemctl restart kubelet

												

搭建一个完整的K8S集群-------基于CentOS 8系统的更多相关文章

  1. 11. 搭建一个完整的K8S集群

    11. 搭建一个完整的Kubernetes集群 1. kubectl的命令遵循分类的原则(重点) 语法1: kubectl 动作 类 具体的对象 例如: """ kube ...

  2. 二进制搭建一个完整的K8S集群部署文档

    服务器规划 角色 IP 组件 k8s-master1 192.168.31.63 kube-apiserver kube-controller-manager kube-scheduler etcd ...

  3. Kubernetes — 从0到1:搭建一个完整的Kubernetes集群

    准备工作 首先,准备机器.最直接的办法,自然是到公有云上申请几个虚拟机.当然,如果条件允许的话,拿几台本地的物理服务器来组集群是最好不过了.这些机器只要满足如下几个条件即可: 满足安装 Docker ...

  4. K8S 使用Kubeadm搭建高可用Kubernetes(K8S)集群 - 证书有效期100年

    1.概述 Kubenetes集群的控制平面节点(即Master节点)由数据库服务(Etcd)+其他组件服务(Apiserver.Controller-manager.Scheduler...)组成. ...

  5. 从零开始搭建高可用的k8s集群

    一.环境准备 使用Hyper-V虚拟机功能搭建三台Centos虚拟机系统,配置好静态IP,分别为k8s-node1(192.168.0.8),k8s-node2(192.168.0.9),k8s-no ...

  6. 仅需60秒,使用k3s创建一个多节点K8S集群!

    作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...

  7. Cassandra集群:一,搭建一个三节点的集群

    环境准备 JDK1.8 http://download.oracle.com/otn/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8 ...

  8. 快速搭建一套k8s集群环境

    参考官网 kubeadm是官方提供的快速搭建k8s集群的开源工具,对于非运维人员学习k8s,kubeadm方式安装相对更简单. kubeadm创建一个集群:https://kubernetes.io/ ...

  9. 使用kind快速搭建本地k8s集群

    Kind是什么? k8s集群的组成比较复杂,如果纯手工部署的话易出错且时间成本高.而本文介绍的Kind工具,能够快速的建立起可用的k8s集群,降低初学者的学习门槛. Kind是Kubernetes I ...

随机推荐

  1. JuiceFS v1.0 beta3 发布,支持 etcd、Amazon MemoryDB、Redis Cluster

    JuiceFS v1.0 beta3 在元数据引擎方面继续增强,新增 etcd 支持小于 200 万文件的使用场景,相比 Redis 可以提供更好的可用性和安全性.同时支持了 Amazon Memor ...

  2. 个人冲刺(一)——体温上报app(一阶段)

    任务:完成了体温上报app的整体页面布局 activity_main.xml <?xml version="1.0" encoding="utf-8"?& ...

  3. 有趣的BUG之Stack Overflow

    今天遇到一个很有意思的bug,当程序开发完成后打包到服务器运行,总是会出现栈溢出异常,经过排查发现,问题出现在一个接口上,但这个接口逻辑并不复杂,除了几局逻辑代码外和打印语句之外也没有其他的了,但是只 ...

  4. ABP框架之——数据访问基础架构

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享阅读心得,希望我的文章能成为你成长路上的一块垫脚石,我们一起精进. 几乎所有的业务应用程序都要适用一种数据库基础架构,用来实现数据访问逻辑,以便从数 ...

  5. 差分隐私(Differential Privacy)定义及其理解

    1 前置知识 本部分只对相关概念做服务于差分隐私介绍的简单介绍,并非细致全面的介绍. 1.1 随机化算法 随机化算法指,对于特定输入,该算法的输出不是固定值,而是服从某一分布. 单纯形(simplex ...

  6. ASP.NET MVC 处理管线模型

    MVC管道整体处理模型 1.在ASP.NET MVC处理管线中的第一站就是路由模块.当请求到达路由模块后,MVC框架就会根据Route Table中配置的路由模板来匹配当前请求以获得对应的contro ...

  7. STM32 CubeMx使用教程

    一.STM32CubeMX 简介 STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以 ...

  8. 管理订单状态,该上状态机吗?轻量级状态机COLA StateMachine保姆级入门教程

    前言 在平常的后端项目开发中,状态机模式的使用其实没有大家想象中那么常见,笔者之前由于不在电商领域工作,很少在业务代码中用状态机来管理各种状态,一般都是手动get/set状态值.去年笔者进入了电商领域 ...

  9. React项目实现导出PDF的功能

    在做web项目中,有时候会遇到pdf导出的需求,现根据之前在公司的React项目中遇到的导出PDF需求,整理一个demo出来. 导出PDF需要用到两个依赖包:html2canvas.jspdf 1.安 ...

  10. 【Github】 Github访问不是私密连接问题

    前言 GitHub是一个软件项目的托管平台,是我们经常需要访问的,我原本在学校时候虽然网速比较慢,但是还以能够满足一些代码下载和上传的,在暑假回到家,再去访问的时候就出现了不能访问的问题. 问题描述 ...