【kubernetes学习】使用kubeadm安装部署单master节点kubernetes

目录

一、环境

二、部署前期准备        

1、基础准备

2.配置系统内核参数

3.同步集群内每个节点的时间

三、为每个节点部署docker服务

四、安装kubeadm和相关工具

1.配置kubernetes yam源

2.将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源(所有节点)。

 3.配置 containerd cgroup 驱动程序 systemd(所有节点)

4.开始安装 kubeadm,kubelet 和 kubectl(master 节点)

 5.使用 kubeadm 初始化集群(master 节点)

6.安装 Pod 网络插件(CNI:Container Network Interface)(master)

​7.node 节点加入 k8s 集群


一、环境

该实验使用对应Kubeadm 部署工具快速安装 Kubernetes 。

环境信息清单:(先部署 1master 和 2node 节点,后面再加一个 master 节点)

主机名操作系统内网IP
k8s-master CentOS 7.6.1810192.168.0.13
k8s-node1      CentOS 7.6.1810192.168.0.17
k8s-node2 CentOS 7.6.1810192.168.0.18

二、部署前期准备        

1、基础准备

配置主机名:

# 在192.168.0.13执行
hostnamectl set-hostname  k8s-master
# 在192.168.0.17执行
hostnamectl set-hostname k8s-node1
# 在192.168.0.18执行
hostnamectl set-hostname k8s-node2

关闭防火墙

systemctl stop firewalld     #关闭防火墙
systemctl disable firewalld  #禁用开机自启防火墙

关闭禁用selinux

sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config  #设置对应配置文件永久关闭
setenforce 0   #临时关闭

关闭swap

swapoff -a    #临时关闭swap分区
sed -i 's/^.*centos-swap/#&/g' /etc/fstab  #在配置文件中禁用swap分区
free  #确认是否关闭

配置集群内的主机名映射:

cat <<EOF >> /etc/hosts
192.168.0.13 k8s-master
192.168.0.17 k8s-node1
192.168.0.18 k8s-node2
EOF

2.配置系统内核参数

# 激活 br_netfilter 模块
modprobe br_netfilter
cat << EOF > /etc/modules-load.d/k8s.conf
br_netfilter
EOF

# 内核参数设置:开启IP转发,允许iptables对bridge的数据进行处理
cat << EOF > /etc/sysctl.d/k8s.conf 
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

# 立即生效
sysctl --system

3.同步集群内每个节点的时间

master节点:

yum install -y chrony    #安装对应服务
sed -i 's/^server/#&/' /etc/chrony.conf   #修改对应配置信息
cat >> /etc/chrony.conf << EOF            #写对应的配置文件
> #server ntp1.aliyun.com iburst
> local stratum 10
> allow 192.168.0.0/16
> EOF
systemctl restart chronyd         #启动对应服务
systemctl enable chronyd          #设置对应服务开机自启

node节点:

yum install -y chrony
sed -i 's/^server/#&/' /etc/chrony.conf
cat >> /etc/chrony.conf  << EOF
> server  192.168.0.13 iburst
> EOF
systemctl restart chronyd
systemctl enable chronyd

三、为每个节点部署docker服务

提示:v1.24 之前的 Kubernetes 版本包括与 Docker Engine 的直接集成,使用名为 dockershim 的组件。这种特殊的直接整合不再是 Kubernetes 的一部分 (这次删除被作为 v1.20 发行版本的一部分宣布)。你可以阅读检查 Dockershim 弃用是否会影响你 以了解此删除可能会如何影响你。要了解如何使用 dockershim 进行迁移,请参阅从 dockershim 迁移。

# 配置yum源
cd /etc/yum.repos.d ; mkdir bak; mv CentOS-Linux-* bak/
# centos7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install yum-utils   # 安装yum-config-manager配置工具
# 设置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce   # 安装docker-ce版本

systemctl start docker     # 启动

systemctl enable docker    # 开机自启

docker --version           # 查看版本号

docker version             # 查看版本具体信息

配置 docker 的镜像加速器、cgroup 驱动及存储驱动程序。加速器请自行去aly获取。

# Docker镜像源设置
# 修改文件 /etc/docker/daemon.json,没有这个文件就创建
# 添加以下内容后,重启docker服务:
cat << EOF > /etc/docker/daemon.json
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF


systemctl reload  docker  #加载
systemctl restart docker  #重启
systemctl status docker   #查看

四、安装kubeadm和相关工具

1.配置kubernetes yam源

cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2.将 sandbox_image 镜像源设置为阿里云 google_containers 镜像源(所有节点)。

# 导出默认配置,config.toml这个文件默认是不存在的
containerd config default > /etc/containerd/config.toml
grep sandbox_image  /etc/containerd/config.toml
sed -i "s#registry.k8s.io/pause#registry.aliyuncs.com/google_containers/pause#g"       /etc/containerd/config.toml
grep sandbox_image  /etc/containerd/config.toml

 3.配置 containerd cgroup 驱动程序 systemd(所有节点)

kubernets 自v 1.24.0 后,就不再使用 docker.shim,替换采用 containerd 作为容器运行时端点。因此需要安装 containerd(在 docker 的基础下安装),上面安装 docker 的时候就自动安装了 containerd 了。这里的 docker 只是作为客户端而已。容器引擎还是 containerd。

sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
# 应用所有更改后,重新启动containerd
systemctl restart containerd

4.开始安装 kubeadm,kubelet 和 kubectl(master 节点)

# 不指定版本就是最新版本,当前最新版就是1.24.1
yum install -y kubelet-1.24.1  kubeadm-1.24.1  kubectl-1.24.1 --disableexcludes=kubernetes
# disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
systemctl enable --now kubelet
# 查看状态,这里需要等待一段时间再查看服务状态,启动会有点慢
systemctl status kubelet


kubectl version    #查看版本
yum info kubeadm   

 5.使用 kubeadm 初始化集群(master 节点)

先将需要的镜像直接下载好,这我们通过官网得知我们在master上需要安装

  1. kube-apiserver:它是Kubernetes API服务器的主要组件,用于公开Kubernetes API,并且允许管理Kubernetes集群上的所有对象(如Pod、Service、ReplicaSet等)。

  2. etcd:etcd是Kubernetes集群中的分布式键值存储系统,它存储了整个集群的状态和元数据信息。

  3. kube-scheduler:kube-scheduler是负责在Kubernetes集群中选择合适的Node节点来运行Pod的组件,它考虑了各种因素,如硬件约束、数据本地性、软件/服务亲和性等。

  4. kube-controller-manager:kube-controller-manager是一组控制器的集合,这些控制器负责监视集群状态的变化,并将期望状态与当前状态进行比较,以确保集群中的所有对象都保持期望状态。

  5. kube-proxy:kube-proxy是Kubernetes集群中的网络代理组件,它负责为Pod对象提供网络代理和负载均衡功能。

  6. coredns:DNS插件为Kubernetes集群中的Pod对象提供DNS解析服务,使它们能够通过域名访问其他Pod

docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.24.1
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.24.1
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.24.1
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.24.1
docker pull registry.aliyuncs.com/google_containers/pause:3.7
docker pull registry.aliyuncs.com/google_containers/etcd:3.5.3-0
docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.6

 集群初始化(其中 --control-plane-endpoint为实现高可用在初始化时直接加载上)

kubeadm init \
 --apiserver-advertise-address=192.168.0.13  \
 --image-repository registry.aliyuncs.com/google_containers \
 --control-plane-endpoint=cluster-endpoint \    
 --kubernetes-version v1.24.1 \
 --service-cidr=10.1.0.0/16 \
 --pod-network-cidr=10.244.0.0/16 \
 --v=5     #如果在初始化过程中报错不够详细可以使用v=6来显示详细的报错
# –image-repository string:    这个用于指定从什么位置来拉取镜像(1.13版本才有的),默认值是k8s.gcr.io,我们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers
# –kubernetes-version string:  指定kubenets版本号,默认值是stable-1,会导致从https://dl.k8s.io/release/stable-1.txt下载最新的版本号,我们可以将其指定为固定版本(v1.22.1)来跳过网络请求。
# –apiserver-advertise-address  指明用 Master 的哪个 interface 与 Cluster 的其他节点通信。如果 Master 有多个 interface,建议明确指定,如果不指定,kubeadm 会自动选择有默认网关的 interface。这里的ip为master节点ip,记得更换。
# –pod-network-cidr             指定 Pod 网络的范围。Kubernetes 支持多种网络方案,而且不同网络方案对  –pod-network-cidr有自己的要求,这里设置为10.244.0.0/16 是因为我们将使用 flannel 网络方案,必须设置成这个 CIDR。
# --control-plane-endpoint     cluster-endpoint 是映射到该 IP 的自定义 DNS 名称,这里配置hosts映射:192.168.0.13   cluster-endpoint。 这将允许你将 --control-plane-endpoint=cluster-endpoint 传递给 kubeadm init,并将相同的 DNS 名称传递给 kubeadm join。 稍后你可以修改 cluster-endpoint 以指向高可用性方案中的负载均衡器的地址。

配置环境变量.(在此处有输入对应的token及一定保存好)

# 临时生效(退出当前窗口重连环境变量失效)
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/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:


# 永久生效(推荐)
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source  ~/.bash_profile

如果在安装过程中依然存在问题在/var/log/messages中查看

tail -f /var/log/messages

 根据对应报错为对应的pod的网络插件未进行安装:

6.安装 Pod 网络插件(CNI:Container Network Interface)(master)

 必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信

# 最好提前下载镜像(所有节点)
docker pull quay.io/coreos/flannel:v0.14.0
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

 

7.node 节点加入 k8s 集群

 安装 kubelet

yum install -y kubelet-1.24.1 kubeadm-1.24.1 kubectl-1.24.1 --disableexcludes=kubernetes
# 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
systemctl enable --now kubelet
systemctl status kubelet

加入对应的节点:

 这里需要等待一段时间,再查看节点节点状态,因为需要安装 kube-proxy 和 flannel

kubectl get pods -A
kubectl get nodes

 

 参考文档:使用 kubeadm 创建集群 | Kubernetes

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值