环境准备

安装k8s集群需要的配置较高,官方建议是最低 2核2G。
本篇安装k8s是在本地搭建的3台centos虚拟机,使用Vagrant构建centos。有关Vagrant的安装使用可以参考Vagrant快速构建虚拟机。

构建3台centos7

创建目录 ~/Documents/temp/k8s

$ mkdir  ~/Documents/temp/k8s

~/Documents/temp/k8s下创建Vagrantfile文件,下面是文件内容。

# Vagrantfile
boxes = [{:name => "manager-node",:eth1 => "192.168.8.11",:mem => "4096",:cpu => "2"},{:name => "worker01-node",:eth1 => "192.168.8.12",:mem => "2048",:cpu => "2"},{:name => "worker02-node",:eth1 => "192.168.8.13",:mem => "2048",:cpu => "2"}
]Vagrant.configure(2) do |config|config.vm.box = "centos7"boxes.each do |opts|config.vm.define opts[:name] do |config|config.vm.hostname = opts[:name]config.vm.provider "vmware_fusion" do |v|v.vmx["memsize"] = opts[:mem]v.vmx["numvcpus"] = opts[:cpu]endconfig.vm.provider "virtualbox" do |v|v.customize ["modifyvm", :id, "--memory", opts[:mem]]v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]v.customize ["modifyvm", :id, "--name", opts[:name]]endconfig.vm.network :public_network, ip: opts[:eth1]endendend

启动虚拟机,启动过程中会碰到让你选择网络,就随便选一个就行了。

$ cd  ~/Documents/temp/k8s
$ vagrant up

每个虚拟机需要安装上docker

# (安装 Docker CE)
## 设置仓库
### 安装所需包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置docker源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
## 安装 Docker CE
sudo yum update -y && sudo yum install -y \containerd.io-1.2.13 \docker-ce-19.03.11 \docker-ce-cli-19.03.11
## 创建 /etc/docker 目录
sudo mkdir /etc/docker
# 设置 Docker daemon
cat <<EOF | sudo tee /etc/docker/daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2","storage-opts": ["overlay2.override_kernel_check=true"]
}
EOF
# Create /etc/systemd/system/docker.service.d
sudo mkdir -p /etc/systemd/system/docker.service.d
# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker
# 设置开机启动
sudo systemctl enable docker

开始安装k8s

开始前的准备(每台机器均需处理)

# (1)关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
# (2)关闭selinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# (3)关闭swap
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
# (4)配置iptables的ACCEPT规则
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
# (5)设置系统参数
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOFsysctl --system

安装kubeadm

# 配置源
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.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安装
yum install -y kubelet-1.19.4-0 kubeadm-1.19.4-0 kubectl-1.19.4-0 --disableexcludes=kubernetes
systemctl enable --now kubelet

拉取docker镜像(master节点执行)

因为k8s google源拉取的比较慢我们提前将所需要到的镜像从阿里源拉到本地。

# 查看所需要到的镜像列表
kubeadm config images list


创建kubeadm.sh

vi kubeadm.sh

下面是配置

#!/bin/bash
set -e
KUBE_VERSION=v1.19.4
KUBE_PAUSE_VERSION=3.2
ETCD_VERSION=3.4.13-0
CORE_DNS_VERSION=1.7.0
GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers
images=(kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${CORE_DNS_VERSION})
for imageName in ${images[@]} ; dodocker pull $ALIYUN_URL/$imageNamedocker tag  $ALIYUN_URL/$imageName $GCR_URL/$imageNamedocker rmi $ALIYUN_URL/$imageName
done

执行脚本拉取镜像

sh ./kubeadm.sh

使用kubeadm初始化集群(master节点执行)

执行初始化命令,192.168.8.11是master节点ip

kubeadm init --kubernetes-version=1.19.4 \
--apiserver-advertise-address=192.168.8.11 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16


按照指示我们执行下列命令,目的是增加权限配置用来访问apiserver。

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

包含kubeadm join的命令一定要粘贴复制下来保存好,这个需要在node节点进行执行,注册到master。

我们检查下master有没有问题,查询下所有pod。

kubectl get po -A


查询下自己本地的master看看是不是包含上述所有的pod,名字无所谓只看前缀。这就代表完成了。

配置node节点

执行上面拷贝下来的内容,分别在两个node节点执行

kubeadm join 192.168.8.11:6443 --token psm8iv.y7y1k29nut1q2pmz \--discovery-token-ca-cert-hash sha256:c40441f4dbf754a6ad903503335a229f53ba846b347b421168db96b38d16f599

执行完成之后我们在master查看下node情况

kubectl get node

安装网络插件

默认情况下节点的STATUS都是NotReady,不要在意我的上图,那是我早些时间执行的,懒得重新弄了。
为什么状态都是NotReady呢,因为kubeadm 默认不提供网络插件,所以我们需要安装上网络插件才行,网络插件有以下选择

  • ACI 通过 Cisco ACI 提供集成的容器网络和安全网络。
  • Calico 是一个安全的 L3 网络和网络策略驱动。
  • Canal 结合 Flannel 和 Calico,提供网络和网络策略。
  • Cilium 是一个 L3 网络和网络策略插件,能够透明的实施 HTTP/API/L7 策略。 同时支持路由(routing)和覆盖/封装(overlay/encapsulation)模式。
  • CNI-Genie 使 Kubernetes 无缝连接到一种 CNI 插件, 例如:Flannel、Calico、Canal、Romana 或者 Weave。
  • Contiv 为多种用例提供可配置网络(使用 BGP 的原生 L3,使用 vxlan 的覆盖网络, 经典 L2 和 Cisco-SDN/ACI)和丰富的策略框架。Contiv 项目完全开源。 安装工具同时提供基于和不基于 kubeadm 的安装选项。
    基于 Tungsten Fabric 的 Contrail 是一个开源的多云网络虚拟化和策略管理平台,Contrail 和 Tungsten Fabric 与业务流程系统 (例如 Kubernetes、OpenShift、OpenStack和Mesos)集成在一起, 为虚拟机、容器或 Pod 以及裸机工作负载提供了隔离模式。
  • Flannel 是一个可以用于 Kubernetes 的 overlay 网络提供者。
  • Knitter 是为 kubernetes 提供复合网络解决方案的网络组件。
  • Multus 是一个多插件,可在 Kubernetes 中提供多种网络支持, 以支持所有 CNI 插件(例如 Calico,Cilium,Contiv,Flannel), 而且包含了在 Kubernetes 中基于 SRIOV、DPDK、OVS-DPDK 和 - VPP 的工作负载。
  • OVN-Kubernetes 是一个 Kubernetes 网络驱动, 基于 OVN(Open Virtual Network)实现,是从 Open vSwitch (OVS) 项目衍生出来的虚拟网络实现。 OVN-Kubernetes 为 Kubernetes 提供基于覆盖网络的网络实现,包括一个基于 OVS 实现的负载均衡器 和网络策略。
  • OVN4NFV-K8S-Plugin 是一个基于 OVN 的 CNI 控制器插件,提供基于云原生的服务功能链条(Service Function Chaining,SFC)、多种 OVN 覆盖 网络、动态子网创建、动态虚拟网络创建、VLAN 驱动网络、直接驱动网络,并且可以 驳接其他的多网络插件,适用于基于边缘的、多集群联网的云原生工作负载。
  • NSX-T 容器插件(NCP) 提供了 VMware NSX-T 与容器协调器(例如 Kubernetes)之间的集成,以及 NSX-T 与基于容器的 CaaS / PaaS 平台(例如关键容器服务(PKS)和 OpenShift)之间的集成。
  • Nuage 是一个 SDN 平台,可在 Kubernetes Pods 和非 Kubernetes 环境之间提供基于策略的联网,并具有可视化和安全监控。
  • Romana 是一个 pod 网络的第三层解决方案,并支持 NetworkPolicy API。 Kubeadm add-on 安装细节可以在这里找到。
  • Weave Net 提供在网络分组两端参与工作的网络和网络策略,并且不需要额外的数据库。

这里我们选择使用calico。在 官网中我们可以看到

如果是小于50个node,使用curl https://docs.projectcalico.org/manifests/calico.yaml -O
如果是超过50个node使用curl https://docs.projectcalico.org/manifests/calico-typha.yaml -o calico.yaml

我们就按照上述的步骤

#下载yaml文件
curl https://docs.projectcalico.org/manifests/calico.yaml -O
# 安装
kubectl apply -f calico.yaml
#下面是持续监控pod的pending情况 --watch代表持续查看
kubectl get po -A --watch


安装完插件之后执行kubectl get node就可以看到所有的节点的status都是ready状态了。
这样我们的k8s的集群就算创建完成了,后面文章会持续分享k8s的使用以及一些resource的介绍。

从0开始构建一个k8s集群相关推荐

  1. K8S(一)VMware Fusion 构建基本k8s集群

    文章目录 背景 准备 网络配置 系统初始化 kubeadm部署k8s集群 harbor私有镜像仓库构建(optional) 功能验证 harbor 私有镜像仓库功能验证 k8s集群功能验证 背景 参考 ...

  2. 使用kubeadm快速部署一个K8s集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点 $ kubeadm i ...

  3. Ubuntu20.04虚拟机使用Kubeadm从0到1搭建K8S集群(超详细)

    前言 最近在读张磊老师的<深入剖析Kubernets>,在阅读4.2节的时候遇到了问题,由于书上使用的版本已经过时,很多命令的执行都失败了,在经历了长达两个星期的折磨以后,我终于把这一节需 ...

  4. K8S 集群部署(快速部署一个 K8S 集群)

    https://youdianzhishi.com/web/course/1004/1019 https://www.qikqiak.com/post/manual-install-high-avai ...

  5. docker-ce-v18.09.0+kubernetes-v1.15.1(k8s)集群环境+dashboard-v1.10.1搭建完整教程

    一.k8s简介 什么是kubernetes 首先,他是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docke ...

  6. 使用kubeadm部署一个K8s集群

    1.前言 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: 2. 安装要求 一台或多台机器,操作系统 Ce ...

  7. 一个有趣的Go项目,3D界面管理k8s集群,真好玩!

    大家好,我是小碗汤,今天分享一个用Golang开发,很好玩的工具`KubeCraftAdmin`[1]:用Minecraft方式管理k8s的工具,感兴趣的兄弟不妨玩一玩.文末有视频,供您鉴赏~ Min ...

  8. 工商银行:应用多k8s集群管理及容灾实践

    摘要:在华为开发者大会(Cloud)2021上,工商银行Paas云平台架构师沈一帆发表了<工商银行多k8s集群管理及容灾实践>主题演讲,分享了工商银行使用多云容器编排引擎Karmada的落 ...

  9. 云原生大爆发,Day2运营与K8s集群生命周期的交织

    嘉宾丨郭至为  整理丨张雪蕊 出品丨CSDN云原生 Wojciech Urbański指出,在当今的专业IT媒体中有一个非常突出的话题,那就是在软件生命周期中的"第0天/第1天/第2天&qu ...

最新文章

  1. NeHe OpenGL教程 第十课:3D世界
  2. SSL与TLS的区别
  3. python3 如何读中文路径_Python 3.8.2安装教程
  4. 嵌入式linux 自动获取IP 及 自动校时
  5. 解决eclipse中tomcat无法识别maven web项目问题
  6. mysql安装及一些注意点
  7. html页面显示动态日期时间,如何在网页中动态显示当前日期和时间(js调用)
  8. SQL Server中, DateTime (日期)型操作的 SQL语法
  9. 继续教育自动听课软件_2017继续教育挂机软件下载
  10. 蓝桥杯学习记录||1264. 动态求连续区间和 | 线段树
  11. air dots 配对_Redmi AirDots可以作为iphone的合格伴侣吗?
  12. 开源星空照片_如何拍摄星空的好照片
  13. 送你个低代码福利,错过要再等一年
  14. mybatis多表查询(一对多,多对一,多对多)
  15. 网络 :基础——路由器、交换机
  16. 来免费领养blog绿豆蛙宠物吧,和QQ宠物差不多
  17. 软件测试到底要不要报培训班学习?看完这个就知道了
  18. c语言期末总结1000,C语言期末总结.doc
  19. 第14周—项目1(3)二叉排序树
  20. React 入门:JSX

热门文章

  1. 给函数取一个“好”名字
  2. CCNA专业英文词汇全集
  3. Android音频焦点及混音策略
  4. AI绘图网站 MJ(Midjourney) 基础讲解+注册教程
  5. Win7下使用wubi.exe安装Ubuntu系统
  6. Eclipse护眼背景色
  7. Matlab实现蚂蚁群算法
  8. 网线8芯线各自作用是什么?几种常用的网线定义行业标准
  9. 游戏开发中道具一键合成思路,多级别道具合成,采用递归方法,简单高效。
  10. java计算机毕业设计农产品供销服务系统源码+系统+mysql数据库+lw文档