K8s安装

本文档详细介绍了如何在Linux环境中安装和配置Kubernetes(K8s)集群,包括设置IP地址、主机名、防火墙规则,安装etcd,配置master和node节点,安装flannel网络,以及搭建内部Docker私有仓库。步骤涵盖从停用firewalld,修改系统配置,到启动和启用相关服务,确保集群正常运行和节点间通信。同时,还提到了通过iptables调整规则以允许容器间的通信,并展示了如何在节点上运行容器并检查其网络状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

K8s的安装

在这里插入图片描述

  1. 修改IP地址、主机名和host解析 (防火墙开启之后一定要清空规则,不然会阻挡流量)
# 共同操作
systemctl stop firewalld
systemctl disable firewalld.service
iptables -F 
iptables-save
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0
vim /etc/hosts
10.0.0.11  k8s-master
10.0.0.12  k8s-node-1
10.0.0.13  k8s-node-2

  1. master节点安装etcd
yum install etcd -y
​
默认只修改第6行和第21行就可以,其他的不用修改

vim /etc/etcd/etcd.conf
3行:ETCD_DATA_DIR="/var/lib/etcd/" # etcd的数据保存目录
6行:ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"      # 2379是对外提供服务 ,2380 是集群之间进行同步的  如果写成localhost 只有本机可以写入数据,其他节点都不可以
9行: ETCD_NAME="node1" # 因为后面要做集群高可用,所以讲这里的default改为node1
21行:ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"   # 集群之间通过10.0.0.11进行同步数据
​
systemctl start etcd.service
systemctl enable etcd.service
​
#  创建数据 ,etcd默认存储数据的方式是以键值对的方式进行的
etcdctl set testdir/testkey0 0
etcdctl get testdir/testkey0
​
# 检测etcd的状态是否健康
etcdctl -C http://10.0.0.11:2379 cluster-health

	etcd原生支持做集群
  1. master节点安装kubernetes
# 如果是集群只需要将这个master多安装几次
yum install kubernetes-master.x86_64 -y
vim /etc/kubernetes/apiserver 
8行:  KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"  
11行:KUBE_API_PORT="--port=8080"  # 监听的端口
14行: KUBELET_PORT="--kubelet-port=10250"  # minions 监听的端口,也就是node节点上的koubelet监听的端口
17行:KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379" # 集群监听的地址,目前只有11,只写它

# 如果是k8s集群的话,可以在后面多次添加几个ip地址
# KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379,10.0.0.12" # 集群监听的地址

23行:KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"  # 删除ServiceAccount这个组件,d e 进行删除一个单词
vim /etc/kubernetes/config
22行:KUBE_MASTER="--master=http://10.0.0.11:8080"
​
systemctl enable kube-apiserver.service
systemctl restart kube-apiserver.service
systemctl enable kube-controller-manager.service
systemctl restart kube-controller-manager.service
systemctl enable kube-scheduler.service
systemctl restart kube-scheduler.service

检查服务是否安装正常	
[root@k8s-master ~]# kubectl get componentstatus 
NAME                 STATUS    MESSAGE             ERROR
etcd-0               Healthy   {"health":"true"}   
scheduler            Healthy   ok                  
controller-manager   Healthy   ok
  1. node节点安装kubernetes
yum install kubernetes-node.x86_64 -y
​
vim /etc/kubernetes/config 
22行:KUBE_MASTER="--master=http://10.0.0.11:8080" # 让controller scheduler proxy 找到api-servervim /etc/kubernetes/kubelet
5行:KUBELET_ADDRESS="--address=0.0.0.0"  # kubelet监听的地址  如果为空监听所有
8行:KUBELET_PORT="--port=10250"
11行:KUBELET_HOSTNAME="--hostname-override=自身ip" # 这个地方可以写成本机的ip地址(更好,唯一)留 空 的话就是自己真实的 主机名
14行:KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080"   # 告诉kubelete去哪里寻找api-server 
​
systemctl enable kubelet.service
systemctl restart kubelet.service
systemctl enable kube-proxy.service
systemctl restart kube-proxy.service

	在master节点检查
[root@k8s-master ~]# kubectl get nodes 
NAME        STATUS    AGE
10.0.0.12   Ready     8m
10.0.0.13   Ready     2m


5.所有节点配置flannel网络

#所有节点
yum install flannel -y
sed -i 's#http://127.0.0.1:2379#http://10.0.0.11:2379#g' /etc/sysconfig/flanneld
​
##master节点:
etcdctl mk /atomic.io/network/config '{"Network":"172.18.0.0/16","Backend": {"Type": "vxlan"}}'
​
systemctl enable flanneld.service 
systemctl restart flanneld.service 
​
##node节点:
systemctl enable flanneld.service 
systemctl restart flanneld.service 
systemctl  restart  docker

etcdctl命令介绍
https://www.bookstack.cn/read/huweihuang-kubernetes-notes/etcd-etcdctl-v2.md
​# 当做完上面的操作之后,默认就全部都是flannel网络了,网段是随机分配的。
node节点上查看​
在这里插入图片描述
在这里插入图片描述
我们试着在node1 和 node2上运行容器,并且查看ip地址

在这里插入图片描述
在这里插入图片描述
我们在master节点上ping一下两个从节点的容器

在这里插入图片描述
我们可以发现我们可以ping通他们的网关但是不能够ping通到容器的里面,就是因为iptables规则默认是 拒绝状态,我们再下面改为accept来实现容器之间的联通

在这里插入图片描述
在这里插入图片描述


node节点
# 在flanel中,默认状态下是拒绝外部访问容器内部的,必须要将默认的改为accept
vim /usr/lib/systemd/system/docker.service
#在[Service]区域下增加一行
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT
systemctl daemon-reload 
systemctl restart docker

补充:system命令的介绍:
https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

再次查看是否可以ping通
在这里插入图片描述

  1. 配置master为镜像仓库
#master节点

yum install docker -y
#所有节点vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.11:5000"]
}
​
systemctl daemon-reload &&\
systemctl restart docker.service
​
或者我们也可以这样修改,让所有节点去寻找这个私库,两个方式选择其中一个即可
#所有节点
sed -i 's/^ExecStart.*/& --insecure-registry 10.0.0.11:5000/' /usr/lib/systemd/system/docker.service
systemctl daemon-reload &&\
systemctl restart docker.service

# 添加路由转发
echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.conf
echo 'net.bridge.bridge-nf-call-ip6tables = 1' >> /etc/sysctl.conf
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p 

#master节点
yum install docker -y
docker pull registry
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  registry
安装完毕
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值