搭建一个完整的K8S集群——-基于CentOS 8系统

创建三个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

undefined

查看文件驱动:

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+,更新也很频繁的仓库:

搭建一个完整的K8S集群-------基于CentOS 8系统

然后开始编写脚本:

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

搭建一个完整的K8S集群-------基于CentOS 8系统

再执行

kubectl get node,此时状态变为Ready

搭建一个完整的K8S集群-------基于CentOS 8系统

至此,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查看podkubectl get pods  kube-proxy-7jmxj  -n kube-system -o widekubectl get pods -n kube-system -o widenode查看连接日志

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

undefined

undefined

Original: https://www.cnblogs.com/spatxos/p/15193971.html
Author: spatxos
Title: 搭建一个完整的K8S集群——-基于CentOS 8系统

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582918/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 运算符重载限制

    p387 5.表 11.1 中的大多数运算符都可以通过成员或非成员函数进行重载,但下面的运算符只能通过成员函数进行重载。 =:赋值运算符。 ():函数调用运算符。 []:下标运算符…

    Linux 2023年6月13日
    089
  • 定时任务调度

    一、crond任务调度 概述: 使用crontab 指令进行定时任务的设置,任务调度是指系统在某个时间端执行的特定任务或程序,例如:病毒扫描,数据库备份等 基本语法: cronta…

    Linux 2023年6月6日
    0126
  • 网络扫描(一)

    使用工具:Kali Linux、Metaspoliatable(作为攻击目标) 扫描的4个不同阶段 用ping验证系统是否正在运行。 用Nmap扫描目标主机的端口。 用Nmap脚本…

    Linux 2023年6月14日
    0109
  • dockerfile

    基础结构 指令 from label maintainer run cmd export env add copy entrypoint volume user workdir o…

    Linux 2023年6月7日
    083
  • linux版powershell中,tab补全,linux外部命令参数名,的模块介绍

    关键字 linux powershell pwsh 补全 complete bash zsh 摘要:linux用户的福音!在linux版powershell中,补全linux外部命…

    Linux 2023年5月27日
    087
  • 1:文件与目录

    CD 切换当前工作目录 mkdir 创建目录 re -dir 删除目录 pwd 打印当前工作目录 绝对路径和相对路径 硬链接 和软链接 CP拷贝 MV 移动 dirname 和 b…

    Linux 2023年6月7日
    0135
  • qsort的cmp函数理解

    近期频繁使用qsort函数,但是对于cmp函数却一直不太熟悉,现用现查。故写一篇小笔记记录一下。 函数原型: void qsort(void *base,size_t NumEle…

    Linux 2023年6月8日
    068
  • k4t系统架构 & 部署最佳实践

    《kaiiit船长》 容器自动管理软件 (k4t,国产k8s) k4t系统架构 & 部署最佳实践 文档修订时间: 2021-11-20 关键词 : k4t kaiiit 船…

    Linux 2023年6月13日
    097
  • EhCache缓存页面、局部页面和对象缓存

    页面缓存:SimplePageCachingFilter web.xml <filter> <filter-name>PageEhCacheFilterfi…

    Linux 2023年6月13日
    0100
  • JS 模块化- 01 模块化前传

    前端技术的发展不断融入了很多后端的思想,逐步形成前端的 “四个现代化”:工程化、模块化、规范化、流程化。这个主题介绍 模块化 ,主要内容包括模块化前传(早期…

    Linux 2023年6月6日
    096
  • postgresql 自增列 初始值设置

    — 获取自增列的名称 SELECT pg_get_serial_sequence(‘table_name’, ‘id’) AS sequence_name; –获取自增列的下一…

    Linux 2023年6月14日
    065
  • Redis采用不同内存分配器碎片率对比

    我们知道Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西。所以系统内存分配器的性能及碎片率会对Redis造成一些性能上的影响。在Redis的 zmall…

    Linux 2023年5月28日
    087
  • 【电子取证:镜像仿真篇】Windows Server镜像仿真、vmdk镜像仿真

    Windows Server镜像仿真、vmdk镜像仿真 时间过得真快呀!–【suy999】 一、qemu-img镜像转换工具 qemu-img(v2.3.0.0)镜像转…

    Linux 2023年6月13日
    099
  • 4-初识Django Admin

    初识Django Admin Django Admin是Django为我们提供的网站后台管理应用,通常网站,个人博客,CMS等都会有个后台管理界面,这个界面只有管理员权限的用户才能…

    Linux 2023年6月7日
    086
  • Windows关闭135/137/139/445 端口

    通过IP安全策略(以关闭135端口为例) (1) 依次打开”控制面板–>系统和安全–>管理工具–>本地安全策略&#…

    Linux 2023年6月8日
    0220
  • POJ3368(Frequent values)–线段树

    题目在这里3368Accepted 7312K 1829MSC++ 6936B 题意为给你一组数据,再给定一组区间,问你这个区间内出现次数最多的元素的次数是多少。 我还记得这题是学…

    Linux 2023年6月7日
    0108
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球