单master部署简要步骤

  1. 准备多台服务器,选定一台为master

例如设置ip为192.168.0.10,host: k8s.master,其他分别为

k8s.s11 192.168.0.11

k8s.s12 192.168.0.12

....

hostname可以使用命令配置

hostname k8s.master

ip解析可以在hosts文件中写入,如果有内部dns解析可以在内部dns上解析

关闭firewalld和selinux

  1. 安装docker、k8s

注意:尽量保持多台服务器安装的应用版本一致

我采用的版本为:

kubeadm

1.23.6

kubectl

1.23.6

kubelet

1.23.6

docker

23.0.1(k8s会提示没有验证过,可以使用Latest validated version: 20.10)

  1. 关闭交换分区(可选,提升性能)

暂时禁用

swapoff -a

长期关闭,可以在/etc/fstab文件中注释,重启服务器

  1. Linux内核参数设置

考虑到服务器配置可能他人修改或被系统默认调整,建议设置 /etc/sysctl.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

如果不设置可能导致 [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1等网络错误。

bridge.bridge-nf-call-ip6tables/bridge.bridge-nf-call-iptables设置原因

不管是 iptables 还是 ipvs 模式,Kubernetes 中访问 service 都会进行 DNAT,将原本访问 ClusterIP:Port 的数据包 DNAT 成 service 的某个 Endpoint (PodIP:Port),然后内核将连接信息插入 conntrack 表以记录连接,目的端回包的时候内核从 conntrack 表匹配连接并SNAT,这样原路返回形成一个完整的连接链路.

net.ipv4.ip_forward:出于安全考虑,Linux系统默认是禁止数据包转发的。

k8s中的三层扁平网络涉及到流量在不同网络设备之间的传递,比如:flannel的实现中,流量会在cni网桥,flannel.1设备,本机网卡设备之间传递流量。如果关闭,则流量无法在多个物理网络设备间传递。

0:表示禁止进行IP转发;

1:表示IP转发功能已经打开。

net.ipv4.ip_nonlocal_bind:此参数表示是否允许服务绑定一个本机不存在的IP地址;

使用场景:有些服务需要依赖一个vip才能启动,但是此vip不在本机上,当vip飘移到本机上时才存在;但是服务又需要提前启动,例如haproxy,nginx等代理需要绑定vip时;

0:默认值,表示不允许服务绑定一个本机不存的地址

1:表示允许服务绑定一个本机不存在的地址

vm.swappiness值越大,表示越积极使用swap分区,越小表示越积极使用物理内存;设置为0会禁止使用swap.需要根据服务器运行的程序类型,来设置不同的参数值。例如,对于Oracle一般设置为10;对于MySQL一般设置为1,尽可能不用swap分区。

  1. 初始化主节点

安装依赖镜像

docker pull  coredns/coredns:1.8.4
docker tag coredns/coredns:1.8.4 registry.dev.com/coredns:v1.8.4
docker images

初始化

kubeadm init \
 --apiserver-advertise-address=192.168.0.10 \
 --image-repository registry.aliyuncs.com/google_containers \
 --service-cidr=10.96.0.0/12 \
 --pod-network-cidr=10.244.0.0/16

如果master需要开启swap,还需要修改 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf kubelet 的启动文件的配置 :在启动命令ExecStart末尾加上: --fail-swap-on=false

然后重新加载配置:

systemctl daemon-reload
systemctl start kubelet

初始成功后有提示加入语句:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.10:6443 --token 42mf2r.n3jvn26r34byvv9b \
        --discovery-token-ca-cert-hash sha256:775a36110dd28b84c3ac074657efc55a899cff77a019a9e2475f1bd0f579b535

按照提示完成master设置

 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config
  1. 子节点加入

kubeadm join 192.168.0.10:6443 --token 42mf2r.n3jvn26r34byvv9b \
        --discovery-token-ca-cert-hash sha256:775a36110dd28b84c3ac074657efc55a899cff77a019a9e2475f1bd0f579b535

如果子节点没有关闭swap,可以添加 --ignore-preflight-errors=Swap

  1. 检查

在主节点上使用命令查询节点情况

 kubectl get nodes
NAME             STATUS     ROLES                  AGE   VERSION
k8s.master       NotReady   control-plane,master   94m   v1.23.6
k8s.s11          NotReady   <none>                 71m   v1.23.6

NotReady 说明master和node节点之间的通信还是有问题的,容器之间通信还没有准备好

  1. 安装flannel

Flannel是一个专为kubernetes定制的三层网络解决方案,主要用于解决容器的跨主机通信问题。

实现原理

Flannel为每个主机提供独立的子网,整个集群的网络信息存储在etcd上。对于跨主机的转发,目标容器的IP地址,需要从etcd获取。

首先下载kube-flannel.yml 配置文件

https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml

安装flannel插件

 kubectl apply -f kube-flannel.yml

在通过第7步方法,检查节点情况,如果STATUS为Ready就表示服务器部署成功。

  1. 关联阅读

  • K8S 新手使用(1) -- TODO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值