Kubernetes集群搭建(kubeadm方式)

20 篇文章 0 订阅
5 篇文章 0 订阅

1、Kubernetes简介

官网:https://kubernetes.io/
一组多个节点服务器的集群,每个节点运行特定的程序
1、优点:
    自我修复:容器故障,迅速启动相同的新容器替补
    弹性伸缩:根据需求,自动对集群中运行的容器数量进行调整
    服务发现:服务自动寻找依赖的服务
    负载均衡:同服务的多个容器自动实现负载均衡
    版本回馈:新发布程序版本有问题,可以立即回退到原来版本
​
2、kubernetes组成
    kubernetes集群组成:主控节点(master、集群的调度管理)、工作节点(node、工作)
​
3、kubernetes组件
    master
        apiServer:集群统一入口,分发请求
        scheduler:节点调度,安排节点部署应用
        controller-manager:管理节点的资源应用
        etcd:保存集群的数据
    note
        kubelet:控制管理docker,管理容器
        kube-proxy:代理应用对外访问
        docker:容器操作
​
4、集群分类
    一主多从:一个master和多个node,搭建简单,但有单机风险,只适用于测试环境
    多主多从:多个master和多个node,搭建麻烦,安全性高,适用生产环境

2、集群环境搭建-系统配置

搭建方式:minlkube、kubeadm、二进制包
    minlkube:快速搭建单节点
    kubeadm:快速搭建集群
    二进制包:官网下载每个组件的二进制包,依次安装
硬件要求
    三台服务器:master、node1、node2
    2核CPU、2G内存

1、设置时间统一 chronyd

#设置时间
date -s "$(ssh root@192.168.80.219 date)"
#查看时间
timedatectl

2、设置主机名

#设置主机名称
hostnamectl set-hostname 主机名
#查看主机名称
hostname

3、设置主机名解析

vi /etc/hosts
#添加以下内容:
192.168.80.219 master
192.168.80.215 node1
192.168.80.216 node2

或者
cat >> /etc/hosts << EOF
> 192.168.80.220 master
> 192.168.80.221 node1
> 192.168.80.222 node2
> EOF

4、验证多台主机是否连通

ping master
ping node1
ping node2

5、关闭防火墙

systemctl stop firewalld.service && systemctl disable firewalld.service
systemctl stop iptables && systemctl disable iptables

6、永久禁用selinux

vi /etc/selinux/config
#将如下行用#注释
SELINUX=enforcing
#添加如下内容
SELINUX=disabled
​
#查看selinux
cat /etc/selinux/config

7、永久关闭swap分区

vi /etc/fstab
#将如下行用#注释
/dev/mapper/centos-swap swap                    swap    defaults        0 0

8、修改Linux内核参数

vi /etc/sysctl.d/k8s_better.conf
#添加如下内容
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
​
#重新加载配置
sysctl -p

9、加载网桥过滤模块

#加载网桥过滤模块
modprobe br_netfilter
#查看网桥过滤模块
lsmod |grep br_netfilter

10、配置IPVS功能

#安装IPset ipvsadmin
yum install ipset ipvsadm -y
#添加需要加载的模块写入脚本文件
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/sh
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
#授予可执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
#执行脚本
/bin/bash /etc/sysconfig/modules/ipvs.modules
#查看对应模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

11、重启服务器

reboot

12、检查系统所有配置

getenforce && free -m

3、集群环境搭建-组件安装

1、安装docker(具体安装已有)

#设置docker源
#docker默认cgroupdriver为cgroupfs,而kubernetes使用的是systemd,所以需要将docker修改为:systemd
cat > /etc/docker/daemon.json << EOF 
{ 
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"] 
} 
EOF
​
#重启docker
systemctl restart docker

2、安装kubernetes

cat <<EOF > /etc/yum.repos.d/kubernetes.repo 
[kubernetes]
name=Kubernetes 
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
        http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
​
#安装kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl
#配置kubelet 
vi /etc/sysconfig/kubelet
#添加如下内容
​
#设置自启动
systemctl enable kubelet

安装的版本如图所示:

4、集群环境搭建-集群安装

1、下载集群镜像

#查看kubernetes所需的镜像
[root@master ~]kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.23.1
k8s.gcr.io/kube-controller-manager:v1.23.1
k8s.gcr.io/kube-scheduler:v1.23.1
k8s.gcr.io/kube-proxy:v1.23.1
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6
#错误:
[root@node1 yum.repos.d]# docker pull k8s.gcr.io/kube-apiserver:v1.23.1
Error response from daemon: Get "https://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

由于国内的网络无法从国外的k8s.gcr.io中下载镜像,但是可以从阿里云拉取,将镜像名修改为k8s对应的镜像名,最后删除阿里云的镜像

images=(
    kube-apiserver:v1.23.1
    kube-controller-manager:v1.23.1
    kube-scheduler:v1.23.1
    kube-proxy:v1.23.1
    pause:3.6
    etcd:3.5.1-0
    coredns/coredns:v1.8.6
)
​
for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    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

2、集群初始化

在master节点:
#初始化(根据实际情况的版本、ip)
kubeadm init --kubernetes-version=v1.23.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.80.219

在master节点:
#执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#部署flannel网络插件:只要在master安装,都会在每个node节点自动运行
wget kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

在node节点:
#集群增加node节点:每个node节点都执行以下命令
kubeadm join 192.168.80.219:6443 --token sml9ev.zy42q45tujhs1kyk \
    --discovery-token-ca-cert-hash sha256:6c1e72cdc9dd56fb4425682e86085f7271202c36b7f699f75c827f3e8aeba5e7

#查看各个节点(每个节点的状态都是Ready即为部署成功)
kubectl get  node
#查看组件
kubectl get pod -n kube-system -o wide

3、测试部署

#创建并启动nginx容器
kubectl create deployment nginx --images=nginx
#暴露容器端口
kubectl expose deployment nginx --port=80 --type=NodePort
#查看容器端口(在其中一个node节点可以看到nginx镜像,同时也看nginx容器)
kubectl get deployment,pod,service

4、问题解决

#问题1:
[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
[ERROR Mem]: the system RAM (972 MB) is less than the minimum 1700 MB
#解决:这种错误一般都出现在虚拟机上,因为物理机或者虚拟机不满足Kubernetes的基础配置造成的,而Kubernetes对CPU要求至少是2核,2G内存,调整内核和内存,重启系统即可
#问题2:
[ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns/coredns:v1.8.6
#解决:由于没有下载到这个k8s.gcr.io/coredns/coredns:v1.8.4镜像,同时它去官网又下载不了,这里有个坑,就是一般打的标签是k8s.gcr.io/coredns:v1.8.6,而新版本的要求是k8s.gcr.io/coredns/coredns:v1.8.6,所以重新改下标签即可
docker tag k8s.gcr.io/coredns:v1.8.6 k8s.gcr.io/coredns/coredns:v1.8.6
#问题3:
[kubelet-check] It seems like the kubelet isn't running or healthy
解决:
vi /etc/docker/daemon.json
#添加如下内容:
"exec-opts": ["native.cgroupdriver=systemd"]
#重启docker
systemctl restart docker
#问题4:
[ERROR Port-6443]: Port 6443 is in use
[ERROR Port-10251]: Port 10251 is in use
[ERROR Port-10252]: Port 10252 is in use
原因:由于K8S集群已进行过初始化主节点
解决:
#重启kubeadm
kubeadm reset
#初始化
kubeadm init --kubernetes-version=v1.23.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.80.219
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建 Kubernetes 集群可以分为以下几个步骤: 1. 确保所有节点上安装了 Dockerkubelet,并启动服务。 2. 安装 kubeadmkubectl 和 kubelet 工具。 3. 在主节点上使用 kubeadm 初始化 Kubernetes 集群。 4. 加入其他节点到集群中。 5. 部署网络插件。 具体步骤如下: 1. 确保所有节点上安装了 Dockerkubelet,并启动服务。 在每个节点上执行以下命令安装依赖项: ``` sudo apt-get update sudo apt-get install -y apt-transport-https curl ``` 安装 Docker: ``` curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install -y docker-ce ``` 启动 Docker 服务: ``` sudo systemctl enable docker sudo systemctl start docker ``` 安装 kubelet: ``` sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet ``` 启动 kubelet 服务: ``` sudo systemctl enable kubelet sudo systemctl start kubelet ``` 2. 安装 kubeadmkubectl 和 kubelet 工具。 在每个节点上安装 kubeadmkubectl 和 kubelet 工具: ``` sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl ``` 3. 在主节点上使用 kubeadm 初始化 Kubernetes 集群。 在主节点上执行以下命令初始化 Kubernetes 集群: ``` sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ``` 初始化完成后,会输出一个类似这样的提示: ``` kubeadm join 192.168.0.100:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef ``` 将这个命令保存下来,后面加入其他节点时需要使用。 4. 加入其他节点到集群中。 在每个节点上执行第一步中的命令,然后使用第三步中得到的加入命令加入到集群中: ``` sudo kubeadm join 192.168.0.100:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef ``` 5. 部署网络插件。 Kubernetes 集群需要网络插件才能实现节点之间的通信。这里以 Calico 为例,执行以下命令部署 Calico 网络插件: ``` kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml ``` 部署完成后,可以使用以下命令查看节点状态: ``` kubectl get nodes ``` 如果所有节点都处于 Ready 状态,那么 Kubernetes 集群就搭建完成了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值