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端口

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

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 的IDEA激活码_通用破解码

    python 的IDEA激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
  • tail -f 命令详解

    tail -f 命令详解tail命令可用于查看文件的内容,有一个常用的参数-f常用于查阅正在改变的日志文件。tail-f等同于–follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止tail-F等同于–follow=name–retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪t…

    2022年5月29日
  • 2021最新Java零基础自学教程,java从入门到精通

    2021最新Java零基础自学教程,java从入门到精通Java是一门用途广泛的语言,不但可以用来开发网站后台、PC客户端和AndroidAPP,还在数据分析、网络爬虫、云计算领域大显身手。从学术的角度讲,Java是一门面向对象的编程语言,初学者需要花费不少时间来熟悉面向对象的概念、语法和编程思想,有不理解的地方请一定要坚持,多花时间编写代码自然会豁然开朗。只有一步一个脚印,踏踏实实学习,才能从零基础到入门,再到精通。大家在学习的过程中也要多看几套Java教程,不要死啃一本书,这样才能才能博采众长,进步更快。今天分享的也是我在自

    2022年6月20日
  • Java调用Shell命令和脚本[通俗易懂]

    Java调用Shell命令和脚本[通俗易懂]1.介绍有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本。而Runtime.getRuntime().exec()方法给我们提供了这个功能,而且

    2022年8月18日
  • wordpress php.ini路径,尝试通过将php.ini放在wordpress root中来启用allow_url_fopen不起作用…

    wordpress php.ini路径,尝试通过将php.ini放在wordpress root中来启用allow_url_fopen不起作用…好吧,我正在构建一个花哨的裤子wordpress主题和部分主题有PHP获取图像宽度和使用这些数字来调整页面元素.它在我的本地机器上工作正常,但是当我使用cpanel将主题放在我的托管服务器上时,它不起作用.我收到这个错误Warning:getimagesize()[function.getimagesize]:http://wrapperisdisabledintheserver…

    2022年7月21日
  • mysql基础知识笔记

    mysql基础知识笔记

    2022年2月21日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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