初识k8s——使用kubeadmin搭建k8s集群

本篇文章是我在自学过程中的笔记整理,因为在自学的过程中也是参考了很多文章,遇到过不同问题,但是有时候尽管按照人家的步骤进行了同样操作也依然会出现一些意想不到的问题,所以自己也写了一篇关于搭建 k8s 集群的文章用来记录一下自己的搭建过程,如果大家觉得本篇文章有用可以借鉴参考,有不足之处欢迎大家评论指正,如有在操作过程中出现问题欢迎评论区留言,我会尽我所能去给大家解答,如需转载请附上原创说明,谢谢!

一、安装要求

在开始之前,部署Kubernetes集群的虚拟机需要满足以下几个条件:

  1. 操作系统 CentOS7.x-86_x64
  2. 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多【注意master需要两核】
  3. 可以访问外网,需要拉取镜像,如果服务器不能访问外网,需要提前下载镜像包并导入节点服务器中(网上还有其他可用的国内镜像,但是我尝试过容易出现一些问题,所以我就干脆直接按照官网要求下载对应的镜像文件)
  4. 禁止swap分区

二、环境准备

mac 上安装虚拟机软件:VMware Fusion 12

centos7镜像:CentOS-7-x86_64-DVD-2207-02.iso

三台centos7虚拟机(配置静态 IP,防止 IP 的变化

节点

ip地址

master

192.168.2.128

work node1

192.168.2.129

work node2

192.168.2.130

三、操作步骤

1、依次在每台虚拟机上将下列指令均执行一遍

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  
# 关闭selinux
# 永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config  
# 临时关闭
setenforce 0  
 
# 关闭swap
# 临时
swapoff -a 
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
 
# 根据规划设置主机名【master节点上操作】
hostnamectl set-hostname k8smaster
# 根据规划设置主机名【node1节点操作】
hostnamectl set-hostname k8snode1
# 根据规划设置主机名【node2节点操作】
hostnamectl set-hostname k8snode2
 
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.2.128 k8smaster
192.168.2.129 k8snode1
EOF
 

# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 生效
sysctl --system  

# 时间同步
yum install ntpdate -y
ntpdate time.windows.com

2、安装Docker/kubeadm/kubelet/kubectl

所有节点安装Docker/kubeadm/kubelet ,Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker

2.1、安装Docker

1)配置docker 的阿里yum源

cat >/etc/yum.repos.d/docker.repo<<EOF
[docker-ce-edge]
name=Docker CE Edge - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/\$basearch/edge
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF

2)yum安装docker

# yum安装
yum -y install docker-ce

# 查看docker版本
docker --version  

# 启动docker
systemctl enable docker
systemctl start docker

3)配置docker的镜像源

cat >> /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

4)重启docker

1 systemctl restart docker
2.2、添加kubernetes软件yum源
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
2.3、安装kubeadm,kubelet和kubectl
# 安装kubelet、kubeadm、kubectl,同时指定版本
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 设置开机启动
systemctl enable kubelet

3、部署master节点

1)在master 节点上执行kubeadm init

# 参数解释:
# --image-repository 指定拉取kubernetes所需组件的镜像仓库
# --pod-network-cidr 设置pod的地址段
kubeadm init --apiserver-advertise-address=192.168.2.128 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=1.18.0  --pod-network-cidr=10.244.0.0/16

【注】注意参数 --pod-network-cidr这个参数值的设置可以是192.168.0.0,或者是10.244.0.0,这个值会在后面的配置网络插件kube-flannel.yml中需要与之对应,很重要,否则会导致flannel pod启动失败,可能出现如下图错误

2)出现如下提示即代码 kubeadm init 执行成功

 3)按照提示执行如下指令

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

4)查看master节点状态,为NotReady

4、部署Slave节点(以node1节点为例)

1)在node1节点下输入kubeadm init 执行成功后输出的指令kubeadm join xxxxx

kubeadm join 192.168.2.128:6443 --token 2p3p1k.iqoylq7ysjzph6ch \                                                                                                               
    --discovery-token-ca-cert-hash sha256:ff50efea2f2a2679e7xxxxxxxxxxxxxxx7770931434ed5b2f9f1ea1

2)上述token具有有效期,到期后需要使用如下指令重新生成token

kubeadm token create --print-join-command

3)当node1节点加入成功后node1也是 NotReady状态

4)为了使得在slave节点也可以使用kubectl命令,需要做如下操作

# 例如在node1节点终端下执行
# 将master 节点下的admin.conf文件拷本到当前node下
[root@k8snode1 ~]# scp root@192.168.2.128:/etc/kubernetes/admin.conf /etc/kubernetes/
[root@k8snode1 ~]# vi /etc/profile
# 加入一行环境变量声明 export KUBECONFIG=/etc/kubernetes/admin.conf
[root@k8snode1 ~]# source /etc/profile

5、部署CNI网络插件Flannel

  • "CNI" 是 "Container Network Interface" 的缩写,意为容器网络接口
  • CNI 插件通常在容器启动时被调用,负责为容器分配 IP 地址、设置网络路由、配置网络策略等。一些常见的 CNI 插件包括 "bridge"(桥接网络)、"flannel"(网络覆盖)、"calico"(网络安全)等。它允许容器运行时插件在容器创建、删除或连接到网络时进行操作,以确保容器可以正常通信和访问外部网络。

注意:在此时查看pods,会发现coredns pod的状态处于pending,这需要等网络插件部署成功后即可变为running状态

1)kube-flannel.yml文件下载

每个节点上都需要下载如下镜像到本地仓库!!

2)kube-flannel.yml文件中所用到的docker镜像均需要下载后导入到本地镜像仓库中(每一个节点都需要执行操作!!

3)执行如下命令生成flannel pod,联通节点之间的网络

[root@k8smaster ~]# kubectl create -f kube-flannel.yml 
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

4)执行上述命令后查看pods,nodes的状态(至此,集群搭建完成!)

6、加入新的从节点

如需在当前k8s 集群中加入新的从节点,可以按照如下步骤进行操作:

# 先完整克隆node1作为新的节点node2  192.168.2.130
# 修改node2的ip,hostname
# 修改/etc/hosts,添加如下代码:
192.168.2.128 k8smaster
192.168.2.129 k8snode1
192.168.2.130 k8snode2
  
# 然后再依次执行如下命令,清除一些由于克隆复制过来的node1的数据信息:
[root@k8snode2 kubernetes]# systemctl stop kubelet
[root@k8snode2 kubernetes]# systemctl stop docker
[root@k8snode2 kubernetes]# rm -rf /var/lib/cni/
[root@k8snode2 kubernetes]# rm -rf /var/lib/kubelet/*
[root@k8snode2 kubernetes]# rm -rf /etc/cni/
[root@k8snode2 kubernetes]# ip link delete cni0
[root@k8snode2 kubernetes]# ip link delete flannel.1
[root@k8snode2 kubernetes]# systemctl start docker 
[root@k8snode2 kubernetes]# systemctl start kubelet
 
# 再执行kubeadm join xxx 加入node2节点到集群中

  • 19
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker+k8s的微服务实战课程 课程目录 一、初识微服务 1 微服务-导学 2 软件架构的进化 3 什么是微服务 4 画出微服务架构图 5 微服务架构的优势和不足 二、微服务带来的问题及解决方案分析 1 微服务架构带来的问题 2 微服务间如何通讯 3 服务发现、部署更新和扩容 4 springboot&springcloud(上) 5 springboot&springcloud(下) 三、微服务开发 1 微服务业务分析 2 Thirft安装和验证 3 Python开发信息服务 4 开发用户服务(上) 5 开发用户服务(下) 6 开发用户EdgeService_A 7 开发用户EdgeService_B 8 开发用户EdgeService_C 9 开发用户EdgeService_D 10 dubbo入门操练(上) 11 dubbo入门操练(下) 12 开发课程服务 13 开发课程EdgeService 14 APIGatewayZuul 四、服务编排前奏 1 服务docker化(上) 2 服务docker化(下) 3 docker下的服务通讯(上) 4 docker下的服务通讯(下) 5 镜像仓库 6 三大平台扬帆起航 五、服务编排-Mesos 1 了解Mesos 2 画出Mesos集群架构图 3 集群环境搭建_A 4 集群环境搭建_B 5 集群环境搭建_C 6 调整微服务适应Mesos 7 微服务部署_A 8 微服务部署_B 9 微服务部署_C 六、服务编排-DockerSwarm 1 了解Swarm 2 集群环境搭建(上) 3 集群环境搭建(下) 4 调整微服务及服务配置 5 微服务部署 七、服务编排-Kubernetes 1 了解kubernetes(上) 2 了解kubernetes(下) 3 环境搭建前奏 4 预先准备环境 5 基础集群部署(上) 6 基础集群部署(下) 7 小试牛刀 8 kube-proxy和kube-dns 9 理解认证、授权 10 为集群添加认证授权(上) 11 为集群添加认证授权(下) 12 再试牛刀 13 部署我们的微服务 八、CICD和DevOps 1 了解CICD和DevOps 2 准备GitLab和Jenkins 3 CICD实践(上) 4 CICD实践(下) 九、课程总结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值