首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >k8s(二)搭建「建议收藏」

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

作者头像
全栈程序员站长
发布2022-09-22 12:14:01
发布2022-09-22 12:14:01
5480
举报

大家好,又见面了,我是你们的朋友全栈君。

  • 一主多从:一个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文件

代码语言:javascript
复制
192.168.56.101 master
192.168.56.102 node1
192.168.56.104 node2

时间同步

代码语言:javascript
复制
systemctl start chronyd
systemctl enable chronyd

禁用iptables 和 firewall 和 selinux

代码语言:javascript
复制
systemctl stop firewalld
systemctl disable firewalld
systemctl stop iptables
systemctl disable iptables

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

禁用swap分区

代码语言:javascript
复制
#/etc/fstab中注释掉下面一行
#/dev/mapper/centos-swap swap swap defaults 0 0

修改linux内核参数

代码语言:javascript
复制
#秀才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

重新加载配置

代码语言:javascript
复制
sysctl -p

加载网桥过滤模块

代码语言:javascript
复制
modprobe br_netfilter

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

代码语言:javascript
复制
lsmod | grep br_netfilter

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

代码语言:javascript
复制
#安装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

代码语言:javascript
复制
cat <<EOF > /etc/docker/daemon.json { "exec-opts":["native.cgroupdriver=systemd"], "registry-mirrors": ["https://663m1ybe.mirror.aliyuncs.com"] } EOF
代码语言:javascript
复制
# 由于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

集群安装

集群安装就是安装上图中的一个个组件

提前下载镜像

代码语言:javascript
复制
#安装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节点

代码语言:javascript
复制
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地址

如果使用集群就运行以下命令创建脚本

部署网络

增加节点(需要在另外两台服务器运行)

查看集群中的节点

代码语言:javascript
复制
[root@hadoop101 ~]# kubectl get nodes #集群中只有一个节点
NAME        STATUS     ROLES    AGE   VERSION
hadoop101   NotReady   master   10m   v1.17.4

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

代码语言:javascript
复制
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节点上执行

代码语言:javascript
复制
#获取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程序 测试下集群是否正常工作

代码语言:javascript
复制
#部署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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装 初始化环境
  • kubernetes必要组件安装
  • 集群安装
  • 验证集群
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档