Kubernetes(k8s)学习笔记(二)--k8s 集群安装

1、kubeadm

kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署:

1.1 创建一个 Master 节点$ kubeadm init

1.2 将一个 Node 节点加入到当前集群中$ kubeadm join <Master 节点的 IP 和端口 >

2、前置要求

  • 一台或多台机器, 操作系统 CentOS7.x-86_x64
  • 硬件配置: 2GB 或更多 RAM, 2 个 CPU 或更多 CPU, 硬盘 30GB 或更多
  • 集群中所有机器之间网络互通可以访问外网, 需要拉取镜像
  • 禁止 swap 分区

3、部署步骤

3.1.在所有节点上安装 Docker 和 kubeadm

3.2.部署 Kubernetes Master

3.3.部署容器网络插件

3.4.部署 Kubernetes Node, 将节点加入 Kubernetes 集群中5.部署 Dashboard Web 页面, 可视化查看 Kubernetes 资源

4、 环境准备

1、准备工作

  • 我们可以使用 vagrant 快速创建三个虚拟机。 虚拟机启动前先设置 virtualbox 的主机网络。 现全部统一为 192.168.56.1, 以后所有虚拟机都是 56.x 的 ip 地址
  • 1.设置虚拟机存储目录, 防止硬盘空间不足

2、 启动三个虚拟机

使用下面的Vagrantfile文件

Vagrant.configure("2") do |config|

(1..3).each do |i|

config.vm.define "k8s-node#{i}" do |node|

设置虚拟机的Box

node.vm.box = "centos/7"

设置虚拟机的主机名

node.vm.hostname="k8s-node#{i}"

设置虚拟机的IP

node.vm.network "private_network", ip: "192.168.56.#{99+i}", netmask: "255.255.255.0"

设置主机与虚拟机的共享目录

node.vm.synced_folder "~/Documents/vagrant/share", "/home/vagrant/share"

VirtaulBox相关配置

node.vm.provider "virtualbox" do |v|

设置虚拟机的名称

v.name = "k8s-node#{i}"

设置虚拟机的内存大小

v.memory = 4096

设置虚拟机的CPU个数

v.cpus = 4

end

end

end

end

  • 将上面的Vagrantfile到非中文无空格目录下, 运行 vagrant up 启动三个虚拟机。

题外话:vagrant 完全可以一键部署全部 k8s 集群,可参照下面的地址去实现。

https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster

http://github.com/davidkbainbridge/k8s-playground

  • 进入三个虚拟机, 开启 root 的密码访问权限。

Vagrant ssh XXX(比如k8s-node1) 依次进入各个节点系统之后

su root 密码为 vagrant

vi /etc/ssh/sshd_config

修改 PasswordAuthentication yes/no

重启服务 service sshd restart

所有虚拟机设置为 4 核 4G

设置好 NAT 网络,设置各个节点网络地址不一样以便区分不同的节点,要不然各个节点网址一样就不好操作。

3、设置 linux 环境(各个节点都执行)

关闭防火墙:

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

验证,swap 必须为 0;

free -g

小tips:由于各个节点都要执行重复的命令,在xshell中,我们可以设置在一个节点输入并发送给所有打开的节点从而避免重复输入,只需在命令行区域右键,在弹出的窗口进行选择已连接的会话,当只需要把命令在当前节点执行时,切换到当前会话即可。

添加主机名与 IP 对应关系

vi /etc/hosts

10.0.2.15 k8s-node1

10.0.2.24 k8s-node2

10.0.2.25 k8s-node3

hostnamectl set-hostname <newhostname>: 指定新的 hostname

su 切换过来

将桥接的 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命令让配置生效

如果执行sysctl --system遇到提示是只读的文件系统的问题,运行如下命令

mount -o remount rw /

5、 所有节点安装 Docker、 kubeadm、 kubelet、 kubectl

Kubernetes 默认 CRI(容器运行时) 为 Docker, 因此先安装 Docker。

1、 安装 docker

1、 卸载系统之前的 docker

sudo yum remove docker \

docker-client \

docker-client-latest \

docker-common \

docker-latest \

docker-latest-logrotate \

docker-logrotate \

docker-engine

2、 安装 Docker-CE

安装必须的依赖

sudo yum install -y yum-utils \

device-mapper-persistent-data \

lvm2

设置 docker repo 的 yum 位置

sudo yum-config-manager \

--add-repo \

https://download.docker.com/linux/centos/docker-ce.repo

由于docker镜像的原因,这一步执行可能会失败,如果失败配置阿里云的

安装 docker,以及 docker-cli

sudo yum install -y docker-ce docker-ce-cli containerd.io

3、配置 docker 加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]

} EOF
sudo systemctl daemon-reload

sudo systemctl restart docker

4、启动 docker & 设置 docker 开机自启

systemctl enable docker

基础环境准备好, 可以给三个虚拟机备份一下; 为 node3 分配 16g, 剩下的 3g。 方便未来侧测试

2、添加阿里云 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

3、安装 kubeadm, kubelet 和 kubectl

yum list|grep kube

yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3

systemctl enable kubelet

systemctl start kubelet

注意:虽然执行了启动命令systemctl start kubelet,但一些配置尚未完成,此时启动失败是正常的。鉴于篇幅关系,关于配置在下一篇文章进行总结。

相关推荐
我的代码永没有bug25 分钟前
day1-小白学习JAVA---JDK安装和环境变量配置(mac版)
java·学习·macos
Zenexus42 分钟前
Linux学习笔记协议篇(六):SPI FLASH设备驱动
linux·笔记·arm
浅浅2801 小时前
numpy、pandas内存优化操作整理
数据结构·经验分享·python·学习·性能优化·numpy·pandas
nenchoumi31191 小时前
VLA论文精读(十四)PointVLA: Injecting the 3D World into Vision-Language-Action Models
论文阅读·笔记·学习·vla
星云之1 小时前
Unity入门笔记(缘更)
笔记·unity·游戏引擎
自己做的好吃1 小时前
基于尚硅谷FreeRTOS视频笔记——13—HAL库和RTOS时钟源问题
笔记
WDeLiang1 小时前
optool为macho文件增加动态库
学习·ios
EQ-雪梨蛋花汤2 小时前
【Unity笔记】Unity音视频播放监听器封装笔记:VideoPlayer + AudioSource事件触发与编辑器扩展
笔记·unity·音视频
你是我的天晴2 小时前
k8s教程4:Kubernetes中的服务发现与负载均衡
kubernetes·服务发现·负载均衡
Java后端何哥2 小时前
Docker Compose 和 Kubernetes(k8s)区别
docker·容器·kubernetes