
本次环境搭建需要三台CentOS服务器(一主二从),然后在每台服务器中分别安装Docker(18.06.3)、kubeadm(1.18.0)、kubectl(1.18.0)和kubelet(1.18.0)。
先搭建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
#重启服务器重启
安装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.cn/168533.html原文链接:https://javaforall.cn