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)
blank

相关推荐

发表回复

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

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