k8s(二)搭建「建议收藏」

k8s(二)搭建「建议收藏」k8s安装 初始化环境kubernetes必要组件安装集群安装一主多从多主多从安装 初始化环境minibuke 用于快速构建单节点k8s的工具kubeadm 用于快速搭建k8s集群的工具二进制包 从官网下载每个组件的二进制包 一次去安装 对于理解k8s更有效作用nathostmaster10.0.3.11192.168.56.101node110.0.3.12192.168.56.102node210.0.3.14192.168.56.1

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  • 一主多从:一个Master节点和多台Node节点,搭建简单,但是有单机故障风险,适合用于测试环境。
  • 多主多从:多台Master和多台Node节点,搭建麻烦,安全性高,适合用于生产环境。
    在这里插入图片描述

安装 初始化环境

本次环境搭建需要三台CentOS服务器(一主二从),然后在每台服务器中分别安装Docker(18.06.3)、kubeadm(1.18.0)、kubectl(1.18.0)和kubelet(1.18.0)。

  • minibuke 用于快速构建单节点k8s的工具
  • kubeadm 用于快速搭建k8s集群的工具
  • 二进制包 从官网下载每个组件的二进制包 一次去安装 对于理解k8s更有效

先搭建3台主机参考搭建3台主机

作用 nat host
master 10.0.3.11 192.168.56.101
node1 10.0.3.12 192.168.56.102
node2 10.0.3.14 192.168.56.104

每台节点上分别安装docker kubeadm kubelet kubectl

配置hosts文件

192.168.56.101 master
192.168.56.102 node1
192.168.56.104 node2

时间同步

systemctl start chronyd
systemctl enable chronyd

禁用iptables 和 firewall 和 selinux

systemctl stop firewalld
systemctl disable firewalld
systemctl stop iptables
systemctl disable iptables

#修改/etc/selinux/config文件
SELINUX=disabled
#修改完之后要重启Linux

禁用swap分区

#/etc/fstab中注释掉下面一行
#/dev/mapper/centos-swap swap swap defaults 0 0

修改linux内核参数

#秀才Linux内核参数 增加网桥过滤和地址转发功能
vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

重新加载配置

sysctl -p

加载网桥过滤模块

modprobe br_netfilter

查看网桥过滤模块儿是否加载成功

lsmod | grep br_netfilter

配置ipvs功能
在kubernetes 中 service 有两种代理模式 一种是基于iptables 一种是基于ipvs
ipvs 效率更高 如果要使用ipvs需要手动载入ipvs模块

#安装ipset 和 ipvsadm
yum install ipset ipvsadm -y

添加需要加载的模块写入脚本文件
cat << EOF > /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 EOF

#为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
#执行脚本
/bin/bash /etc/sysconfig/modules/ipvs.modules
#查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

#重启服务器

重启

kubernetes必要组件安装

安装DockerDocker安装
注意
Docker在默认情况下使用的Cgroup Driver为cgroupfs 而kubernetes推荐使用的systemd来代替cgroupfs

cat <<EOF > /etc/docker/daemon.json { "exec-opts":["native.cgroupdriver=systemd"], "registry-mirrors": ["https://663m1ybe.mirror.aliyuncs.com"] } EOF
# 由于kuberneters镜像在国外 速度比较慢 切换成国内镜像
# 编辑/etc/yum.repos.d/Kubernetes.repo 添加以下配置
[Kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/	
enabled=1
gpcheck=0
repo_gpcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
		http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
# 安装kubeadm kubelet kubectl
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

# 配置kubelet 的group
# 编辑/etc/sysconfig/kubelet 添加以下配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

#设置kubelet 开机自启
systemctl enable kubelet

# 设置开机自启动
systemctl enable kubelet

集群安装

在这里插入图片描述
集群安装就是安装上图中的一个个组件

提前下载镜像

#安装kubernetes集群前 必须要提前准备好需要的镜像 所需要的镜像可以通过下面命令查看
kubeadm config images list

#下载镜像
#此处镜像在kubernetes仓库中 由于网络原因 无法连接 下面提供一种解决方案
images=(
	kube-apiserver:v1.17.4
	kube-controller-manager:v1.17.4
	kube-scheduler:v1.17.4
	kube-proxy:v1.17.4
	pause:3.1
	etcd:3.4.3-0
	coredns:1.6.5
)

for imageName in ${images[@]};do
	docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
	#从阿里云上下载的镜像打标签成k8s官方名字
	docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName	 
	docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

初始化集群
master节点

kubeadm init --kubernetes-version=v1.17.4 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=10.0.3.11	#master节点ip地址

如果使用集群就运行以下命令创建脚本
在这里插入图片描述

部署网络
在这里插入图片描述
增加节点(需要在另外两台服务器运行)
在这里插入图片描述
查看集群中的节点

[root@hadoop101 ~]# kubectl get nodes #集群中只有一个节点
NAME        STATUS     ROLES    AGE   VERSION
hadoop101   NotReady   master   10m   v1.17.4

另外两台服务器运行如下命令

kubeadm join 10.0.3.11:6443 --token ra63d5.xp3uvqajlava2mju \
    --discovery-token-ca-cert-hash sha256:ce5732f8cda38849bd3f34ff8c4273e8ef7b018849270feb5a3afd732212abd0 
#再次在master节点上查看
[root@hadoop101 ~]# kubectl get nodes
NAME        STATUS     ROLES    AGE   VERSION
hadoop101   NotReady   master   12m   v1.17.4
hadoop102   NotReady   <none>   17s   v1.17.4
hadoop104   NotReady   <none>   14s   v1.17.4

#新增两台节点 但是此时状态都是NotReady 因为网络插件还没有安装

安装网络插件
kubernetes支持多种网络插件如flannel.callco.canal 等
本机选用flannel 下面的操作依然在master节点运行即可,插件使用的是Daemon控制器 他会在每个节点上都运行

下面的操作依然只在master节点上执行

#获取fannel配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 修改文件中的quay.io 仓库为quay-mirror.qiniu.com

#使用配置文件启动fannel
kubectl apply -f kube-flannel.yml

#稍等片刻 再次查看集群节点的状态
kubectl get nodes
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   29m   v1.17.4
node1    Ready    <none>   27m   v1.17.4
node2    Ready    <none>   26m   v1.17.4

如果通过发现全部都是NotReady状态
通过kubectl describe nodes node1 命令查看报错原因
看到此原因
NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

则参考这篇博客
解决方案

验证集群

以后操作在master上操作即可

在kubernetes 集群上部署一个nginx程序 测试下集群是否正常工作

#部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine

#暴漏端口
kubectl expose deployment nginx --port=80 --type=NodePort

#查看服务状态
kubectl get pods,service
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-6867cdf567-n55q6   1/1     Running   0          2m38s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        3h43m
service/nginx        NodePort    10.96.122.54   <none>        80:30880/TCP   107s
#外界访问服务器的30880端口就会转换到80端口

外界浏览器访问 成功
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168533.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 黑客入门 | 什么是踩点[通俗易懂]

    黑客入门 | 什么是踩点[通俗易懂]踩点就是收集目标信息的技巧,通过踩点找寻你感兴趣的信息。《孙子兵法》曰:“知已知彼,百战不殆;不知彼而知己,一胜一负;不知彼不知己,每战必殆。”通过对目标进行有计划,有步骤的踩点,收集整理出一份关于该目标的信息安防现状完整剖析图。收集方面:因特网、内联网、远程访问、外联网因特网主要收集:域名、网络地址和子网、可以直接从因特网访问的各个系统的具体IP地址、已经被发现的各个系统上运行的TCP和…

  • http://www.objectarx.net/forum.php?mod=forumdisplay&fid=18&page=2

    http://www.objectarx.net/forum.php?mod=forumdisplay&fid=18&page=2http://www.objectarx.net/forum.php?mod=forumdisplay&fid=18&page=2

  • webpack版本不兼容_怎么安装webpack在其他盘

    webpack版本不兼容_怎么安装webpack在其他盘运行webpack时报错:Cannotfindmodule’webpack/bin/config-yargs’Thisisprobablynotaproblemwithnpm.Thereislikelyadditionalloggingoutputabove.可能是版本兼容问题,更正后的版本:”devDependencies”:{“webpack”:”^4.39.2″,”webpack-cli”:”^3.3.12″,”webp

  • 《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项

    《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上。MyBatis提供了一级缓存、二级缓存这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能。本文的目的则是向读者详细介绍MyBatis的一级缓存,深入源码,解析MyBatis一级缓存的实现原理,并且针对一级缓存的特点提出了在实际使用过程中应该注意的事项。读完本文,你将会学到:1、什么是一级缓存?为什么使用一级缓存?2、MyBatis的一级缓存是怎样组织的?(即SqlS

  • 通俗理解线性回归(一)

    通俗理解线性回归(一)0什么是回归?假设线性回归是个黑盒子,那按照程序员的思维来说,这个黑盒子就是个函数,然后呢,我们只要往这个函数传一些参数作为输入,就能得到一个结果作为输出。那回归是什么意思呢?其实说白了,就是这个黑盒子输出的结果是个连续的值。如果输出不是个连续值而是个离散值那就叫分类。那什么叫做连续值呢?非常简单,举个栗子:比如我告诉你我这里有间房子,这间房子有40平,在地铁口,然后你来猜一猜我的房子总共值…

  • readprocessmemory函数库_read_csv函数

    readprocessmemory函数库_read_csv函数ReadProcessMemory函数ReadProcessMemory函数功能描述:该函数用来读取指定进程的空间的数据,此空间必须是可以访问的,否则读取操作会失败!函数原型BOOLReadProcessMemory(HANDLEhProcess,//目标进程句柄LPCVOIDlpBaseAddress,//读取数据的起始地址LPVOIDlpBuffer,//存放数据的缓存区地址DW…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号