k8s-部署 Kubernetes 集群(kubeadm方式)
一 机器准备
| IP | 主机名 | 角色 | 配置 | 安装组件 |
| 192.168.198.150 | master-1 | master | 2U2G |
master组件 etcd kubectl |
| 192.168.198.151 | master-2 | master | 2U2G | master组件 etcd kubectl |
| 192.168.198.152 | master-3 | master | 2U2G | master组件 etcd kubectl |
| 192.168.198.153 | node-1 | worker | 2U2G | worker组件 |
| 192.168.198.154 | node-2 | worker | 2U2G | worker组件 |
| 192.168.198.155 | node-3 | worker | 2U2G | worker组件 |
二 环境准备(所有节点)
所有机器关闭防火墙 selinux swap分区
所有机器做好相互解析 时间同步
可在master-1节点上生成密钥对 并将公钥拷贝至其他节点 方便通信与传输文件
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld #关闭selinux
setenforce 0
sed -ri "s/(^SELINUX=)(.*)/\1disabled/" /etc/selinux/config #关闭swap分区
swapoff -a
sed -i.bak 's/^.*swap/#&/' /etc/fstab #相互解析
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.198.150 master-1
192.168.198.151 master-2
192.168.198.152 master-3
192.168.198.153 node-1
192.168.198.154 node-2
192.168.198.155 node-3 #时间同步略
#建议用master节点上的一台服务器同步外网时间 其他节点服务器同步这台服务器时间
配置内核参数
[root@localhost ~]# cat /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
[root@localhost ~]# sysctl --system
加载ipvs模块
[root@localhost ~]# yum -y install ipset ipvsadm
[root@localhost ~]# cat /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
[root@localhost ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
[root@localhost ~]# /etc/sysconfig/modules/ipvs.modules
三 安装docker(所有节点)
下载docker
#下载docker源
cd /etc/yum.repos.d/
curl -O http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #下载docker(本次下载18.06版本)
#可用 yum list docker-ce --showduplicates 查看可下载版本
yum -y install docker-ce-18.06.0.ce
配置docker
[root@localhost ~]# mkdir /etc/docker
[root@localhost ~]# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
#下为镜像加速器 可不写 也可加入自己的镜像加速器地址
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
[root@localhost ~]# systemctl enable docker --now
四 安装kubelet(所有节点)
下载k8s源
[root@localhost ~]# cat /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
下载kubeadm kubelet kubectl ipvsadm(前三版本要一致 不然容易出错 ipvsadm可选择下载)
#查看可下载版本
yum list --showduplicates|egrep kubeadm #下载1.18.0版本
yum install -y kubeadm-1.18.0-0 kubelet-1.18.0-0 kubectl-1.18.0-0 ipvsadm #先将kubelet设为开机自启(还没配网络 起不来)
systemctl enable kubelet
五 安装负载均衡(master节点)(单master无需部署)
在master上安装kube-apiserver kube-scheduler kube-controller-manager
kube-scheduler 和 kube-controller-manager 可以以集群模式运行 通过 leader 选举产生一个工作进程 其它进程处于阻塞模式
kube-apiserver可以运行多个实例 但对其它组件需要提供统一的访问地址 该地址需要高可用
创建 haproxy 启动脚本并启动
#!/bin/bash
MasterIP1=192.168.198.150
MasterIP2=192.168.198.151
MasterIP3=192.168.198.152
MasterPort=6443 # apiserver端口 docker run -d --restart=always --name haproxy-k8s -p 6444:6444 \
-e MasterIP1=$MasterIP1 \
-e MasterIP2=$MasterIP2 \
-e MasterIP3=$MasterIP3 \
-e MasterPort=$MasterPort wise2c/haproxy-k8s
创建keepalived 启动脚本并启动
#!/bin/bash
VIRTUAL_IP=192.168.122.100 # VIP
INTERFACE=eth0 # 网卡名称
NETMASK_BIT=24
CHECK_PORT=6444 # Haproxy端口
RID=10
VRID=160
MCAST_GROUP=224.0.0.18
docker run -itd --restart=always --name=keepalived-k8s \
--net=host --cap-add=NET_ADMIN \
-e VIRTUAL_IP=$VIRTUAL_IP \
-e INTERFACE=$INTERFACE \
-e NETMASK_BIT=$NETMASK_BIT \
-e CHECK_PORT=$CHECK_PORT \
-e RID=$RID -e VRID=$VRID \
-e MCAST_GROUP=$MCAST_GROUP wise2c/keepalived-k8s
测试
创建成功后在每台master节点上查看容器是否正常运行
查看每台master节点上的6444端口是否被监听
在有VIP的机器关闭haproxy容器或keepalived容器看看VIP能否正常漂移
六 初始化master(master-1)
创建初始化配置文件
#创建配置文件目录
mkdir k8s
cd k8s/ #生成配置文件
kubeadm config print init-defaults > init.yml
根据实际环境修改初始化配置文件
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.198.150 #改为本机IP
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: master-1
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "192.168.122.100:6444" # 添加 VIP:PORT
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers # 使用国内镜像仓库
kind: ClusterConfiguration
kubernetesVersion: v1.18.0 #版本号
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16 # 添加 pod子网,和Flannel中要一致
scheduler: {}
#添加下列数据
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
初始化master-1
此过程需要等待几分钟时间 如果中途失败 再次初始化前先执行 kubeadm reset 命令清理 然后再执行init或join操作
kubeadm init --config=init.yml --upload-certs | tee kubeadm-init.log
成功后记住回显中添加master和node节点的命令(也可到保存的文件中查看)后续需用其添加节点
第一条为添加master节点 第二条为添加node节点
token有效期为两小时 过期后可输入命令重新生成
kubeadm init phase upload-certs --upload-certs

七 配置kubectl( 无论在master节点或node节点 要能够执行kubectl命令必须进行配置 有两种配置方式 )
1 通过配置文件(初始化master后的回显)

2 通过环境变量
echo 'export KUBECONFIG=/etc/kubernetes/admin.conf' >> ~/.bashrc
source ~/.bashrc
八 部署网络插件(master-1)
#下载kube-flannel.yml文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml #执行安装
kubectl apply -f kube-flannel.yml #查看信息(等待)
kubectl get po -n kube-system

九 添加节点
将/etc/kubernetes/admin.conf 这个文件拷贝至你需要操作的机器上
执行添加节点命令添加相应的节点
k8s-部署 Kubernetes 集群(kubeadm方式)的更多相关文章
- Kubeadm部署K8S(kubernetes)集群(测试、学习环境)-单主双从
1. kubernetes介绍 1.1 kubernetes简介 kubernetes的本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理.目的是实现资源管理的自动 ...
- 使用kubeadm部署Kubernetes集群
一.环境架构与部署准备 1.集群节点架构与各节点所需安装的服务如下图: 2.安装环境与软件版本: Master: 所需软件:docker-ce 17.03.kubelet1.11.1.kubeadm1 ...
- kubeadm部署Kubernetes集群
Preface 通过kubeadm管理工具部署Kubernetes集群,相对离线包的二进制部署集群方式而言,更为简单与便捷.以下为个人学习总结: 两者区别在于前者部署方式使得大部分集群组件(Kube- ...
- Kubernetes探索学习001--Centos7.6使用kubeadm快速部署Kubernetes集群
Centos7.6使用kubeadm快速部署kubernetes集群 为什么要使用kubeadm来部署kubernetes?因为kubeadm是kubernetes原生的部署工具,简单快捷方便,便于新 ...
- 二进制部署 Kubernetes 集群
二进制部署 Kubernetes 集群 提供的几种Kubernetes部署方式 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernet ...
- 二进制包部署Kubernetes集群
今天这篇文章教给大家如何快速部署一套Kubernetes集群.K8S集群部署有几种方式:kubeadm.minikube和二进制包.前两者属于自动部署,简化部署操作,我们这里强烈推荐初学者使用二进制包 ...
- 和我一步步部署 kubernetes 集群
和我一步步部署 kubernetes 集群 本系列文档介绍使用二进制部署最新 kubernetes v1.6.1 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群: 在部署的过程中, ...
- 高可用Kubernetes集群-15. 部署Kubernetes集群统一日志管理
参考文档: Github:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsear ...
- 【云原生 · Kubernetes】部署Kubernetes集群
[云原生 · Kubernetes]搭建Harbor仓库 接着上次的内容,后续来了! 在master节点执行脚本k8s_master_install.sh即可完成K8S集群的部署,具体步骤参考如下(1 ...
- 使用Rancher的RKE快速部署Kubernetes集群
简要说明: 本文共涉及3台Ubuntu机器,1台RKE部署机器(192.168.3.161),2台Kubernetes集群机器(3.162和3.163). 先在Windows机器上,将rke_linu ...
随机推荐
- CTA策略介绍
CTA策略更多的时候是一种投资方法,更准确的说,主要投资于衍生品的.比较系统化规则化的投资方法都可以称作CTA投资,它并不拘泥于量化或是主动,其具有相当的生命力,会长期存在. CTA策略的收入来源是多 ...
- 如何在langchain中对大模型的输出进行格式化
简介 我们知道在大语言模型中, 不管模型的能力有多强大,他的输入和输出基本上都是文本格式的,文本格式的输入输出虽然对人来说非常的友好,但是如果我们想要进行一些结构化处理的话还是会有一点点的不方便. 不 ...
- 利用Jdk动态代理模拟MyBatis的Mapper功能
本文将先介绍jdk动态代理的基本用法,并对其原理和注意事项予以说明.之后将以两个最常见的应用场景为例,进行代码实操.这两个应用场景分别是拦截器和声明性接口,它们在许多开发框架中广泛使用.比如在spri ...
- IP的电源管脚
IP的电源管脚是个特殊的存在. 1.对于前度RTL集成,需要和IP vendor以及后端确认,集成与综合时是否需要将电源DVDD,AVDD,引出到top层. 2.绝大部分情况下IP的电源PIN是sup ...
- [Ynoi2002] Goedel Machine
题目描述 由于你不会设计哥德尔机,所以你决定先做一道数据结构题: 给定一个长度为 \(n\) 的序列 \(a_1\cdots a_n\).你需要回答 \(m\) 个询问,第 \(i\) 个询问给定一个 ...
- C++ Qt开发:标准Dialog对话框组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍标准对话框QI ...
- Go 泛型之类型参数
Go 泛型之类型参数 一.Go 的泛型与其他主流编程语言的泛型差异 Go泛型和其他支持泛型的主流编程语言之间的泛型设计与实现存在差异一样,Go 的泛型与其他主流编程语言的泛型也是不同的.我们先看一下 ...
- Linux 485驱动通信异常
背景 前段时间接到一个项目,要求用主控用485和MCU通信.将代码调试好之后,验证没问题就发给测试了.测试测的也没问题. 但是,到设备量产时,发现有几台设备功能异常.将设备拿回来排查,发现是485通信 ...
- websocket实现实时直播
websocket实现实时直播 这篇文章我首发于简书,拿到这里发表不过分吧?点个赞再走呗! 作为一名web开发者,我使用websocket实现实时直播(滑鸡版). 为什么是滑鸡版呢?因为他上不了生产, ...
- 如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2
在 Part 1 中,我们一起了解了什么是 Prometheus 和 Grafana,以及使用这些工具的前提条件和优势.在本部分,将继续带您学习如何安装 Helm 以及如何使用 Prometheus ...