大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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账号...