一、准备工作
1、3台centerOS系统
192.168.40.204 | Master |
192.168.40.205 | Noder1 |
192.168.40.206 | Noder2 |
2、修改主机名称(3台)
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
复制
3、关闭防火墙(3台)
#关闭防火墙
systemctl stop firewalld
systemctl stop firewalldsystemctl disable firewalld
#关闭SELinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
复制
4、关闭SWAP(3台)
方式1(注释掉fstab下面一行):
vim etc/fstab
#/dev/mapper/rhel-swap none swap defaults 0 0
方式2:
sed -ri 's/.*swap.*/#&/' etc/fstab
复制
5、修改hosts文件(3台都做)
vim etc/hosts
192.168.40.204 k8s-master
192.168.40.205 k8s-node1
192.168.40.206 k8s-node2
复制
6、修改网卡配置(3台都做)
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
复制
解释:
vim etc/sysctl.d/kubernetes.conf
这个配置用于启用IPv6数据包的防火墙规则检查。在Kubernetes集群中,网络通信可能会涉及IPv6,因此需要启用此选项来确保正确的网络功能
net.bridge.bridge-nf-call-ip6tables = 1
net.b这个配置用于启用iptables规则检查。Kubernetes使用iptables来管理容器的网络流量,这个选项确保iptables规则能够正确地应用于容器通信ridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
这个配置用于启用Linux主机上的IP数据包转发功能。在Kubernetes中,通常需要将网络流量从一个节点路由到另一个节点,以实现容器之间的通信。启用IP数据包转发是实现这一功能的关键。
sysctl -p
sysctl -p 命令用于重新加载系统的 sysctl 配置文件,以应用其中的更改,而无需重新启动系统。在你之前提到的 etc/sysctl.d/kubernetes.conf 文件中进行的更改将在运行 sysctl -p 命令后生效,以确保系统的网络配置按照你的要求进行了调整。
7、系统模块配置(3台都做)
modprobe br_netfilter
lsmod | grep br_netfilter
复制
解释:
运行 modprobe br_netfilter 命令是为了在 Linux 内核中启用桥接网络的网络包过滤功能,以满足容器化和容器编排环境中的网络需求和安全性要求。
8、安装k8s和docker(3台都做)
#安装K8S
yum install -y kubelet-1.27.0 kubeadm-1.27.0 kubectl-1.27.0
#安装docker
yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18
#设置K8S开机自启
systemctl enable kubelet
复制
注意!!!!!:K8S集群和docker的版本必须兼容。
9、修改K8S和docker配置文件(3台都做)
#设置K8S镜像
cat > etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#设置docker配置文件,如果没有daemon.json文件需要手动进行创建。
vim etc/docker/daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://8zs3633v.mirror.aliyuncs.com"]
}
#重启docker
systemctl restart docker
systemctl enable docker.service
复制
二、集群搭建
1、启动master(master)
kubeadm init --apiserver-advertise-address=192.168.40.204 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version v1.23.0 --service-cidr=10.10.10.0/24 --pod-network-cidr=10.20.20.0/24 --ignore-preflight-errors=all
复制
解释:
kubeadm init:这部分是命令本身,用于启动 Kubernetes 初始化过程。
--apiserver-advertise-address=192.168.40.204:这个选项指定了 Kubernetes API 服务器向集群中的其他节点和外部客户端宣布的 IP 地址。在这里,API 服务器将使用 192.168.40.204 这个 IP 地址来与其他节点和客户端通信。
--image-repository=registry.aliyuncs.com/google_containers:这个选项用于指定容器镜像的仓库地址。在这里,使用了 registry.aliyuncs.com/google_containers 作为容器镜像仓库,以加速容器镜像的下载。
--kubernetes-version v1.23.0:这个选项用于指定要安装的 Kubernetes 版本。在这里,使用的版本是 v1.23.0。
--service-cidr=10.10.10.0/24:这个选项用于指定 Kubernetes 集群中的服务 IP 地址范围。服务 IP 地址是用于访问 Kubernetes 服务的虚拟 IP 地址。在这里,服务 IP 地址范围被设置为 10.10.10.0/24。
--pod-network-cidr=10.20.20.0/24:这个选项用于指定 Kubernetes 集群中的 Pod 网络 IP 地址范围。Pod 网络 IP 地址用于容器之间的通信。在这里,Pod 网络 IP 地址范围被设置为 10.20.20.0/24。
--ignore-preflight-errors=all:这个选项用于忽略 Kubernetes 初始化过程中的预检错误。在这里,使用 all 来表示忽略所有预检错误,这样可以绕过一些可能会引起初始化失败的问题。请注意,这个选项在生产环境中应该谨慎使用,只在特定情况下才使用它,例如在非生产环境中进行实验或调试。
执行上述代码的结果如下,需要复制标注中的内容在node1,node2执行。
2、启动noder1和noder2(在node1和node2)
在node1和node2上执行启动master中的token命令进行加入。
4f9ff4a2b6b5afeb3
kubeadm join 192.168.40.204:6443 --token
84yx13.vtuiffikqo9ln33m \
--discovery-token-ca-cert-hash
sha256:4b5d495d83d9dffe5c91c5e11be365402606ffadf843086
复制
3、查看是否加入集群
kubectl get nodes
复制
3、查看是否加入集群
kubectl get nodes
复制
4、排错
(1)在启动master或noder报错:
“[kubelet-check] TheHTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed witherror: Get"http://localhost:10248/healthz": dial tcp [::1]:10248: connect: connection refused.”
复制
解决方案:
设置docker配置文件有没有出错daemon.json。
(2)在启动noder时如果报错:
“xecution phase preTlight
fetch the kubeadm-config (onfioMap: failed to get component configs: could not download the kubelet configu
复制
解决:
判断master和noder的K8S集群的版本是否一致是否进行重启。通过如下命令进行检查。
#卸载当前docker
yum remove -y docker-ce-x.x.x docker-ce-cli-x.x.x
#卸载当前k8s
yum remove -y kubelet-x.x.0 kubeadm-x.x.x kubectl-x.x.x
复制
(3)在noder启动失败后会显示一些配置信息已经存在已经存在的报错信息。
解决:
kubeadm reset -y
rm -rf /etc/kubernetes/kubelet.conf
rm -rf /etc/kubernetes/pki/ca.crt
systemctl restart kubelet
复制
三、部署网络
1、下载calico(maseter)
Calico(Calico网络,或Calico项目)是一个用于容器网络和网络策略的开源网络解决方案,特别是在Kubernetes和容器编排环境中广泛使用。Calico旨在提供高性能、可扩展性和安全性的容器网络功能。
方式一:
wget https://docs.projectcalico.org/v3.19/manifests/calico.yaml --no-check-certificate
方式二:
wget https://docs.projectcalico.org/manifests/calico.yaml --n
复制
2、修改pod网络(master)
修改pod网络“CALICO_IPV4POOL_CIDR”与--pod-network-cidr一致。
3、修改calico.yaml镜像源(master)
cat calico.yaml |grep 'image:'
sed -i 's#docker.io/##g' calico.yaml
复制
4、进行部署(master)
#部署
kubectl apply -f calico.yaml
#查看状态,执行完上一条命令需要等一会才全部running
kubectl get pods -n kube-system
复制
5、排错
1、在部署kubectl apply -f calico.yaml时如果报错:
error: error parsing calico.yaml: error converting YAML to JSON: yaml: line 182: did not find expected '-' indicator
复制
解决:请查看回车是否严格正确。
四、部署Dashboard
1、下载并配置Dashboard(master)
Dashboard是官方提供的一个Web UI,可用于基本管理K8s资源,执行如下命令下载yaml文件。默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部。
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml
复制
修改recommended.yaml中nodePort为31000,添加并且添加type:NodePort。
注意空格!!!!不然会报错。之后执行如下命令:
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard
复制
解释:
kubectl apply -f recommended.yaml
用于应用 Kubernetes 资源清单文件 recommended.yaml 中定义的资源配置到 Kubernetes 集群。这个命令将创建、更新或删除集群中的资源,具体取决于清单文件中定义的内容和集群的当前状态
kubectl get pods -n kubernetes-dashboard
获取位于 kubernetes-dashboard 命名空间中的所有 Pod 的信息。
2、创建service account(master)
在master节点创建service account并绑定默认cluster-admin管理员集群角色。
# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
复制
执行命令后复制其中的tocken
3、登录Dashboard(master)
复制结果中token值登陆Dashboard。登陆https://master ip 或 node ip:31000 都可以。
结果:
版权声明:本文内容来自CSDN:FlynnAAAA,遵循CC 4.0 BY-SA版权协议上原文接及本声明。
本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。
原文链接:https://blog.csdn.net/m0_59924300/article/details/132648351
如有涉及到侵权,请联系,将立即予以删除处理。
在此特别鸣谢原作者的创作。
此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。
复制