搭建一个完整的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
查看文件驱动:
# 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系统的更多相关文章
- 11. 搭建一个完整的K8S集群
11. 搭建一个完整的Kubernetes集群 1. kubectl的命令遵循分类的原则(重点) 语法1: kubectl 动作 类 具体的对象 例如: """ kube ...
- 二进制搭建一个完整的K8S集群部署文档
服务器规划 角色 IP 组件 k8s-master1 192.168.31.63 kube-apiserver kube-controller-manager kube-scheduler etcd ...
- Kubernetes — 从0到1:搭建一个完整的Kubernetes集群
准备工作 首先,准备机器.最直接的办法,自然是到公有云上申请几个虚拟机.当然,如果条件允许的话,拿几台本地的物理服务器来组集群是最好不过了.这些机器只要满足如下几个条件即可: 满足安装 Docker ...
- K8S 使用Kubeadm搭建高可用Kubernetes(K8S)集群 - 证书有效期100年
1.概述 Kubenetes集群的控制平面节点(即Master节点)由数据库服务(Etcd)+其他组件服务(Apiserver.Controller-manager.Scheduler...)组成. ...
- 从零开始搭建高可用的k8s集群
一.环境准备 使用Hyper-V虚拟机功能搭建三台Centos虚拟机系统,配置好静态IP,分别为k8s-node1(192.168.0.8),k8s-node2(192.168.0.9),k8s-no ...
- 仅需60秒,使用k3s创建一个多节点K8S集群!
作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...
- Cassandra集群:一,搭建一个三节点的集群
环境准备 JDK1.8 http://download.oracle.com/otn/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8 ...
- 快速搭建一套k8s集群环境
参考官网 kubeadm是官方提供的快速搭建k8s集群的开源工具,对于非运维人员学习k8s,kubeadm方式安装相对更简单. kubeadm创建一个集群:https://kubernetes.io/ ...
- 使用kind快速搭建本地k8s集群
Kind是什么? k8s集群的组成比较复杂,如果纯手工部署的话易出错且时间成本高.而本文介绍的Kind工具,能够快速的建立起可用的k8s集群,降低初学者的学习门槛. Kind是Kubernetes I ...
随机推荐
- HTML语言的简要学习
什么是HTML? HTML 是用来描述网页的一种语言. l HTML 指的是超文本标记语言 (Hyper Text Markup Language) l HTML 不是一种编程语言,而是一种标记语 ...
- SSO 方案演进
背景介绍 随着业务与技术的发展,现今比以往任何时候都更需要单点登录 SSO 身份验证. 现在几乎每个网站都需要某种形式的身份验证才能访问其功能和内容. 随着网站和服务数量的增加,集中登录系统已成为一种 ...
- 五、redis哨兵两套环境同一局域网容灾切换问题
上周遇到个灵异事件,实验室有两套环境来搭建redis集群和哨兵,分别是: 第一套环境IP:67(master) 65(salve) 66(salve)第二套环境IP:115(master) 116(s ...
- 120_PowerBI堆积瀑布图_R脚本Visual
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.效果 二.data 三.添加字段 注意红色框标注地方 四.code # 下面用于创建数据帧并删除重复行的代码始终执行, ...
- 一个 "开箱即用" 个人博客全栈系统项目!vue+node+express+mysql+sequlize+uniapp
" MG'Blog " 一个 "开箱即用" 个人博客全栈系统项目! 探索本项目的源码 » 前台预览 · 管理端预览 v1.0.2 小程序预览 v1.0.2 介绍 ...
- 【单片机】CH32V103C8T6定时器3程序实验
代码功能:每隔1毫秒进入一次定时器中断. 每隔1秒串口打印一次数据. time.c #include "time.h" #include "ch32v10x.h" ...
- 历经70+场面试,我发现了大厂面试的bug,并总结其中心得
想起了学弟在去年秋招时面试了50余家,加上暑期实习面试了20余家,加起来也面试了70余场. 基本把国内有名的互联网公司都面了一遍,不敢说自己的面试经验很丰富,但也是不差的. 这次专门把大厂的面试做了个 ...
- fpm工具安装
概述 最近在对机房的编译环境做整理,过程曲折而痛苦,记录一下. 之前的一个老项目,在打包的时候用到了一个叫做fpm的工具. 编译环境涉及centos6和centos7,在新的编译环境的过程中,如何安装 ...
- vue按需引入第三方ui插件优化
components.js import { fullScreenContainer, borderBox12, scrollBoard, loading, borderBox10, borderBo ...
- Mybatis+SpringBoot 项目All elements are null
xml文件内容如下 查出来的集合长度是有的,但是会出现All elements are null 解决方案: 注意我的xml文件全部是这样的,并且我调用的sql返回值是 resultType=&qu ...