前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >学习kubernetes,从快速搭建k8s集群开始

学习kubernetes,从快速搭建k8s集群开始

作者头像
极客开发者
发布于 2022-01-18 04:39:46
发布于 2022-01-18 04:39:46
47700
代码可运行
举报
文章被收录于专栏:极客开发者极客开发者
运行总次数:0
代码可运行

本系列文章,我们将在Ubuntu Server 18.04上搭建k8s环境进行入门学习。为了使用原生的Ubuntu Server 18.04,我们将使用multipass来创建多台Ubuntu Server 18.04虚拟环境。也就是说,如果你想完整参考本系列博客学习,你电脑上应当安装并能正常运行multipass,如果你想了解multipass基本操作,可以参考我写的另一篇博客:【使用Multipass管理Ubuntu虚拟机】。本文演示k8s集群搭建步骤,并不涉及k8s基础知识,你可能对文章的一些专业词语感到默生,但没有关系,我们在后面会循序渐进地介绍k8s知识。

文章目录

一、准备环境

二、安装docker与kubeadm

三、k8s集群初始化

本次我们将部署一个主节点(master1)和两个工作节点(worker1、worker2)的集群。为了节省电脑资源,master1、worker1、worker2每个节点分配2个cpu、2G内存、10G硬盘。这是k8s要求的最低配置,但这些配置完全足够我们用以学习。相关操作都会在root用户之下。

准备环境

01

创建Ubuntu Server 18.04虚拟机

分别创建2核cpu、10G硬盘、2G内存,名为master1、worker1、worker2三台虚拟机

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
multipass launch -c 2 -d 10G -m 2G -n master1 18.04
multipass launch -c 2 -d 10G -m 2G -n worker1 18.04
multipass launch -c 2 -d 10G -m 2G -n worker2 18.04

使用multipass list查询创建的虚拟机列表,如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pan@pandeMacBook-Pro ~ % multipass list
Name                    State             IPv4             Image
master1                 Running           192.168.64.8     Ubuntu 18.04 LTS
worker1                 Running           192.168.64.11    Ubuntu 18.04 LTS
worker2                 Running           192.168.64.12    Ubuntu 18.04 LTS

创建虚拟机之后,我们需要对虚拟机进行初始化操作,以下的操作需要在所有主机上进行。

02

修改root用户密码

为了方便使用root用户,我们对每一台虚拟机进行密码修改操作。以master1为例,如下代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 进入主机
multipass shell master1
# 修改root密码,这里我都改为123456
sudo passwd root
# 修改密码之后,直接使用su命令切换 root用户
su

03

关闭防火墙和iptables

根据官方文档,防火墙和iptables可能会影响到k8s集群,所以我们需要关闭掉

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 关闭防火墙
ufw disable
# 关闭iptables
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F

安装docker与kubeadm

下面的很多安装过程,我们大多使用阿里云镜像进行安装。

01

安装与配置docker

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装docker
# 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# 写入软件源信息
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# 更新软件库
apt-get -y update

# 安装程序
apt-get -y install docker-ce=5:19.03.15~3-0~ubuntu-bionic

# 固定版本
apt-mark hold docker-ce

# 设置docker阿里云加速镜像仓库
mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://g6ogy192.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"] 
}
EOF

systemctl daemon-reload

systemctl restart docker

02

安装kubeadm, kubelet, kubectl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 下载 gpg 密钥
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -

# 添加 k8s 镜像源
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

# 更新软件库
apt-get update

# 安装程序
apt-get install -y kubelet=1.18.0-00 kubeadm=1.18.0-00 kubectl=1.18.0-00

# 固定版本
apt-mark hold kubelet kubeadm kubectl

03

集群镜像准备

使用kubeadm config images list命令查看当前集群所需要的镜像,镜像版本会根据kubeadm版本而定,返回如下内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
k8s.gcr.io/kube-apiserver:v1.18.20
k8s.gcr.io/kube-controller-manager:v1.18.20
k8s.gcr.io/kube-scheduler:v1.18.20
k8s.gcr.io/kube-proxy:v1.18.20
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

我们使用docker拉取镜像,但是由于国内正常访问不到k8s.cgr.io,可以替换阿里加速镜像地址:registry.aliyuncs.com/google_containers,执行如下命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.20
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.20
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.20
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.18.20
docker pull registry.aliyuncs.com/google_containers/pause:3.2
docker pull registry.aliyuncs.com/google_containers/etcd:3.4.3-0
docker pull registry.aliyuncs.com/google_containers/coredns:1.6.7

接下来给镜像重命名,使其和原kubeadm需要的镜像名称一致

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.20 k8s.gcr.io/kube-apiserver:v1.18.20
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.20 k8s.gcr.io/kube-controller-manager:v1.18.20
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.20 k8s.gcr.io/kube-scheduler:v1.18.20
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.18.20 k8s.gcr.io/kube-proxy:v1.18.20
docker tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag registry.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag registry.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

再删除掉从阿里云下载的镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker rmi registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.20
docker rmi registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.20
docker rmi registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.20
docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.18.20
docker rmi registry.aliyuncs.com/google_containers/pause:3.2
docker rmi registry.aliyuncs.com/google_containers/etcd:3.4.3-0
docker rmi registry.aliyuncs.com/google_containers/coredns:1.6.7

k8s集群初始化

01

初始化master节点

在master节点执行初始化命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubeadm init --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16  --ignore-preflight-errors=Swap

参数说明

--service-cidr:k8s中scv网络的网络段

--pod-network-cidr:k8s中pod使用的网络段

--ignore-preflight-errors:忽略swap报错

初始化结果如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Your Kubernetes control-plane has initialized successfully!

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

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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.64.8:6443 --token mzolyd.fgbta1hw9s9yml55 \
    --discovery-token-ca-cert-hash sha256:21ffa3a184bb6ed36306b483723c37169753f9913e645dc4f88bb12afcebc9dd

02

配置集群网络

根据初始化结果提示,我们需要安装网络插件。本次我们使用flannel作为集群的网络插件,将flannel配置文件从互联网保存到master1,文件地址为:https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml,在master1上将文件命名为kube-flannel.yml,后执行以下命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f kube-flannel.yml

如看到如下信息,即网络插件安装成功

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
podsecuritypolicy.policy/psp.flannel.unprivileged 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

03

Linux普通用户能操作集群

根据初始化结果提示,为了让master1上的Linux普通用户正常操作集群,我们输exit按回车切换回普通用户后执行以下命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

04

初始化集群工作节点

同时,初始化集群管理节点master1之后,我们需要将工作节点worker1和wroker2加入到集群中。将工作节点的初始化命令拷贝到worker1和worker2,使集群的工作节点(worker1、worker2)和管理节点(master1)关联起来,如下命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubeadm join 192.168.64.8:6443 --token mzolyd.fgbta1hw9s9yml55 \
    --discovery-token-ca-cert-hash sha256:21ffa3a184bb6ed36306b483723c37169753f9913e645dc4f88bb12afcebc9dd

在工作节点执行初始化命令之后,我们在管理节点使用kubectl get pods --all-namespaces查看结果,如下结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@master1:/home/ubuntu# kubectl get pods --all-namespaces
NAMESPACE     NAME                              READY   STATUS    RESTARTS   AGE
kube-system   coredns-66bff467f8-pw9br          1/1     Running   0          13m
kube-system   coredns-66bff467f8-wsj45          1/1     Running   0          13m
kube-system   etcd-master1                      1/1     Running   0          14m
kube-system   kube-apiserver-master1            1/1     Running   0          14m
kube-system   kube-controller-manager-master1   1/1     Running   0          14m
kube-system   kube-flannel-ds-c4jnh             1/1     Running   0          3m39s
kube-system   kube-flannel-ds-rg58c             1/1     Running   0          3m14s
kube-system   kube-flannel-ds-sw85v             1/1     Running   0          3m15s
kube-system   kube-proxy-ddk88                  1/1     Running   0          3m15s
kube-system   kube-proxy-dt825                  1/1     Running   0          13m
kube-system   kube-proxy-jgm4h                  1/1     Running   0          3m14s
kube-system   kube-scheduler-master1            1/1     Running   0          14m

需要注意的是,如果你的列表中显示的所有pod并不是处于Running状态,你需要等待一段时间。而且,你在安装集群的过程中,最好处于一个优质的网络环境。

至此,集群搭建完毕。从下一篇文章开始我们将继续介绍k8s基础知识

end

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客开发者up 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kubernetes_v1.18.2环境搭建 博主亲自实践可用
在上述安装 kubeadm 的过程中,kubeadm 和 kubelet、kubectl、kubernetes-cni 这几个二进制文件都会被自动安装好。
憧憬博客
2020/07/21
5110
在 Ubuntu 上安装 K8S教程
如果系统本身自带得镜像地址,服务器在国外,下载速度会很慢,可以打开 /etc/apt/sources.lis 替换为国内得镜像源。
痴者工良
2021/04/26
14.3K0
【Kubernetes学习笔记】-kubeadm 手动搭建kubernetes 集群
kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,通过将集群的各个组件进行容器化安装管理,通过kubeadm的方式安装集群比二进制的方式安装要方便不少。
DevOps在路上
2023/05/16
9180
【Kubernetes学习笔记】-kubeadm 手动搭建kubernetes 集群
「走进k8s」kubeadm搭建 Kubernetes1.15.1集群环境(14)
安装花了2天时间,总结了各种坑,就是为了让大家在学习k8s的时候不在从入门到放弃。
IT架构圈
2019/08/15
2.2K0
如何部署一个Kubernetes集群
在上一篇文章《Kubernetes和Docker的关系是什么?》和大家分享了关于Kubernetes的基本系统架构以及关于容器编排相关的概念,并总体阐述Kubernetes与Docker之间的基本关系。而要学习Kubernetes容器编排技术,首先要解决的就是学习环境问题,而由于Kubernetes本身具有一定的复杂性,且需要较大的系统资源环境,所以对于刚入门的读者来说如何快速部署一套Kubernetes学习环境就成了一件棘手的事情。
用户5927304
2020/08/27
8890
如何部署一个Kubernetes集群
使用kubeadm安装k8s
在安装kubeadm之前,都需要配置yum源,创建文件/etc/yum.repos.d/kubernetes.repo
编程黑洞
2023/03/06
8570
Kubernetes 环境搭建 - CentOS
三台 CentOS 7.4 服务器:kube1 、kube2 、kube3 ,配置:2 核 16G
轻量级云原生架构实验室
2018/08/02
6570
Kubernetes 集群搭建
上一篇文章,我们介绍和对比了 Docker Swarm 和 Kubernetes:
用户3147702
2022/06/27
1.5K0
Kubernetes 集群搭建
利用Multipass搭建k8s
将其添加到/etc/docker/daemon.json,将dockercgroup驱动程序设置为systemd:
是小张啊喂
2022/08/18
1.1K0
微服务 - 搭建k8s(kubeadm)模拟复杂的生产环境(下篇)
在之前的k8s实践中,我们使用minikube搭建了k8s环境,为了更真实的展示生产级别的k8s,本节课采用kubeadm来搭建master+worker集群,实现k8s集群,master、worker在虚拟机上来执行,中间遇到了超级多的坑,在这里系统的总结一下,分上下两篇进行讲解。
stark张宇
2023/03/06
6400
n-Kubernetes配置解析与入坑解决FAQ记录
描述:在学习任何一门新技术总是免不了坑坑拌拌,当您学会了记录坑后然后将其记录当下次遇到,相同问题的时候可以第一时间进行处理;
全栈工程师修炼指南
2020/10/23
1.5K0
n-Kubernetes配置解析与入坑解决FAQ记录
Kubernetes集群搭建超详细总结(CentOS版)
学习Kubernetes的关键一步就是要学会搭建一套k8s集群。在今天的文章中作者将最近新总结的搭建技巧,无偿分享给大家!废话不多说,直接上干货!
用户5927304
2021/06/29
2.2K3
kubernetes-1:使用kubeadm搭建K8S单master节点集群
现在官方推荐的是kubespray,但也是基于kubeadm;除此之外,还有kind,minikube,但是并不试用于部署生产级别集群。
千里行走
2019/07/03
2.1K0
kubernetes 集群离线部署
下载离线安装包https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
奶盖
2022/11/16
4K1
Create you course K8s cluster-创建课程所需的k8s集群
线上跑的是自建的集群搭建方式详见:https://duiniwukenaihe.github.io/2020/07/22/tencent-slb-kubeadm-ha/(跑了两个集群,其实还是跑的1.16版本,只进行了小版本升级现为1.16.15版本)
对你无可奈何
2021/02/01
6881
10分钟搭建Kubernetes容器集群平台(kubeadm)
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。
星哥玩云
2022/07/28
3920
10分钟搭建Kubernetes容器集群平台(kubeadm)
kubeadm部署kubernetes集群
(3) 生成Kube Config文件,kubelet需要用这个文件与Master通信。
星哥玩云
2022/07/28
3310
Kubernetes/K8S部署之kubeadm
修改镜像地址:(有可能默认不能拉取,确保能够访问到quay.io这个registery,否则修改如下内容)
码客说
2021/03/04
1.2K0
n-Kubernetes入坑解决FAQ记录
描述:在学习任何一门新技术总是免不了坑坑拌拌,当您学会了记录坑后然后将其记录当下次遇到,相同问题的时候可以第一时间进行处理;
全栈工程师修炼指南
2022/09/29
5.7K0
n-Kubernetes入坑解决FAQ记录
K8s 安装
如果你的节点上面有科学上网的工具,可以忽略这一步,我们需要提前将所需的gcr.io上面的镜像下载到节点上面,当然前提条件是你已经成功安装了docker。
分母为零
2019/07/04
1.8K0
K8s 安装
相关推荐
Kubernetes_v1.18.2环境搭建 博主亲自实践可用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验