【亲手实践】本地multipass安装kubernetes,再也不怕环境被铲
一、安装multipass
1. 安装multipaas软件版本 brew install multipass
2. 创建三个虚拟机master(192.168.64.6)、node1(192.168.64.14)、node2(192.168.64.15),2G cpu+2G内存+40G硬盘,Qemu+桥连模式
$ multipass find 查找可用ubuntu版本,这里选择22.04这个版本
$ multipass launch -n master -c 2 -m 2G -d 50G --network bridged 22.04
$ multipass launch -n node1 -c 2 -m 2G -d 50G --network bridged 22.04
$ multipass launch -n node2 -c 2 -m 2G -d 50G --network bridged 22.04
3. 设置网络
$ multipass networks 查找可连接网络
$ multipass set local.bridged-network=en0
$ multipass set local.master.bridged=true
$ multipass set local.node1.bridged=true
$ multipass set local.node2.bridged=true
4. 每个实例设置mount,以master举例
$ multipass shell master
>ubuntu@master: sudo snap install multipass-sshfs
$ sudo snap install multipass-sshfs
$ multipass mount /Users/xxx/Documents/work/k8sdev/mutipaas/k8s-node1 node1:/root
-------------以下操作进入每个实例执行---------------------
二、安装kubernetes
0. 加hosts,sudo vi /etc/hosts
192.168.64.6 master
192.168.64.14 node1
192.168.64.15 node2
1. 关闭swap空间 swapoff -a, 通过free -h 查看swap是否关闭。
避免开机启动交换空间, $ vi /etc/fstab 注释掉swap开头的行
2. 关闭防火墙 sudo ufw disable (sudo -s 切换到root)
3. 设置时区,dpkg-reconfigure tzdata,Asia/shanghai
安装 ntpdate,apt-get update && apt-get install ntpdate
设置系统时间与网格同步,ntpdate edu.ntp.org.cn
apt install util-linux-extra
将系统时间写入硬件时间 $ hwclock --systohc
4. 安装docker
https://cloud.tencent.com/developer/article/2076354
保证老版本docker卸载了,sudo apt-get remove docker docker-engine docker.io containerd runc
安装docker依赖, sudo apt-get install ca-certificates curl gnupg lsb-release
添加Docker官方GPG密钥, curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
添加Docker软件源,#sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo add-apt-repository "deb [arch=arm64] https://download.docker.com/linux/ubuntu xenial stable"
查看可安装的Dokcer版本,apt-cache madison docker-ce
安装docker,[最新版本] apt-get install docker-ce docker-ce-cli containerd.io
[安装1.19.03版本] apt-get install docker-ce=5:19.03.15~3-0~ubuntu-xenial docker-ce-cli=5:19.03.15~3-0~ubuntu-xenial containerd.io
需要注意,docker版本要跟k8s版本对应
运行docker,systemctl start docker
验证是否成功,sudo docker run hello-world
如果显示 cgroup mountpoint does not exist: unknown错误,执行如下脚本(cgroup文件特别容易出问题):
#$ mkdir /sys/fs/cgroup/systemd
$ mkdir /root/cgroup/systemd
$ mount -t cgroup -o none,name=systemd cgroup /root/cgroup/systemd/
设置为开机自启动,/usr/lib/systemd/systemd-sysv-install enable docker
5. 安装k8s工具 kubeadm kubectl kubelete
#确认已安装系统工具,apt-get update && apt-get install -y apt-transport-https
安装CPG证书,curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
写入软件源,vi /etc/apt/sources.list.d/kubernetes.list 加入:deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
安装,[安装最新版本] apt-get update && apt-get install -y kubeadm kubelet kubectl
[安装指定版本] apt-get update && apt-get install -y kubelet=1.19.9-00 kubeadm=1.19.9-00 kubectl=1.19.9-00 (具体版本可以查https://mirrors.aliyun.com/kubernetes/apt/)
[卸载] apt-get remove -y kubelet kubeadm kubectl
修改cloud.cfg,vi /etc/cloud/cloud.cfg,
# 修改成 true
preserve_hostname: true
6. 安装kubernetes
1) 执行脚本如下: /root/kubernetes/cluster
$ cd /root
$ mkdir kubernetes
$ cd kubernetes
$ mkdir cluster
$ cd cluster
$ kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
(有个WARNNING提示,忽略)
$ vi kubeadm.yml,修改如下地方:
修改主机ip advertiseAddress: 192.168.64.6
修改镜像地址(k8s.gcr.io 为Google镜像地址) imageRepository:registry.aliyuncs.com/google_containers
注意: kubernetesVersion 版本
networking:
serviceSubnet:10.96.0.0/12
podSubnet: 10.224.0.0/24
2) 查看需要下载哪些镜像, kubeadm config images list --config kubeadm.yml
拉取镜像, kubeadm config images pull --config kubeadm.yml (忽略WARNNING报错)
查看镜像,docker images
3) 安装主节点(node节点不走此步骤):
kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log
如果执行失败,journalctl -xeu kubelet | grep error 查看kubelete启动失败原因, 或者 systemctl status kubelet 查看kubelete状态。
如果显示 cgroup mountpoint does not exist: unknown错误,执行如下脚本:
$ mkdir /sys/fs/cgroup/systemd
$ mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd/
如果执行失败后,重新执行,会显示prelight error, port in use,这个时候,kubeadm reset --force 后,再次执行 kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log
/etc/docker/daemon.json,将dockercgroup驱动程序设置为systemd,此时daemon.json如下:
{ "registry-mirrors": ["https://c8lfvm3n.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] , "bip": "10.90.0.0/24"}
重新加载daemon.json,重启docker和kubelet:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ sudo systemctl restart kubelet
kubeadm init失败了很多次,主要是卡在kubelet启动,来回systemctl status kubelet 查看报错,逐个解决后,kubeadm reset --force 之后再kubeadm init --config=kubeadm.yaml --uploadcerts.
一定要注意,kubeadm reset之后,需要执行手动清理脚本:
$ apt install ipvsadm iptables
$ ipvsadm --clear
$ rm -rf /etc/cni/net.d
# $ iptables -X
$ rm -f $HOME/.kube/config
kubeadm init 成功标志如下:

准备kubeconfig,执行如下脚本:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ export KUBECONFIG=/etc/kubernetes/admin.conf

设置为开机自启动,systemctl enable kubelet && systemctl start kubelet
安装flannl:
$ sysctl net.bridge.bridge-nf-call-iptables=1
$ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
$ kubeadm config view | grep podSubnet 查询--pod-network-cidr, 或者kubectl cluster-info dump | grep -m 1 cluster-cidr
$ vi kube-flannel.yml, 修改
net-conf.json: |
{
"Network": "10.224.0.0/24”,
"EnableNFTables": false,
"Backend": {
"Type": "vxlan"
}
}
$ kubectl create -f kube-flannel.yml
4) 安装node节点
/etc/docker/daemon.json,将dockercgroup驱动程序设置为systemd,此时daemon.json如下:
{ "registry-mirrors": ["https://c8lfvm3n.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] , "bip": "10.91.0.0/24"}
重新加载daemon.json,重启docker和kubelet:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ sudo systemctl restart kubelet
加入k8s集群,
kubeadm join 192.168.64.6:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:8fadf05a2dcf92a5e042ce0714788e486b82ab14d5fe64e46d80948fae352b3d
到master节点修改node1的podCird,kubectl patch node node1 -p '{"spec":{"podCIDR":"10.224.1.0/24"}}'
设置为开机自启动,systemctl enable kubelet && systemctl start kubelet

flannel网络图(来源https://blog.csdn.net/u011127242/article/details/113090640)
【亲手实践】本地multipass安装kubernetes,再也不怕环境被铲的更多相关文章
- 在 MacOS 中使用 multipass 安装 microk8s 环境
在 MacOS 中使用 multipass 安装 microk8s 环境 Multipass & MicroK8s 介绍 What is Kubernetes? Kubernetes clus ...
- 在CentOS 7.6 以 kubeadm 安装 Kubernetes 1.15 最佳实践
前言 Kubernetes作为容器编排工具,简化容器管理,提升工作效率而颇受青睐.很多新手部署Kubernetes由于"scientifically上网"问题举步维艰,本文以实战经 ...
- kubeadm安装Kubernetes 1.15 实践
原地址参考github 一.环境准备(在全部设备上进行) 3 台 centos7.5 服务器,网络使用 Calico. IP地址 节点角色 CPU 内存 Hostname 10.0.1.45 mast ...
- Centos7 二进制安装 Kubernetes 1.13
目录 1.目录 1.1.什么是 Kubernetes? 1.2.Kubernetes 有哪些优势? 2.环境准备 2.1.网络配置 2.2.更改 HOSTNAME 2.3.配置ssh免密码登录登录 2 ...
- Centos7 使用 kubeadm 安装Kubernetes 1.13.3
目录 目录 什么是Kubeadm? 什么是容器存储接口(CSI)? 什么是CoreDNS? 1.环境准备 1.1.网络配置 1.2.更改 hostname 1.3.配置 SSH 免密码登录登录 1.4 ...
- Centos 使用kubeadm安装Kubernetes 1.15.3
本来没打算搞这个文章的,第一里面有瑕疵(没搞定的地方),第二在我的Ubuntu 18 Kubernetes集群的安装和部署 以及Helm的安装 也有安装,第三 和社区的问文章比较雷同 https:// ...
- 创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备
一.包管理工具及CentOS的yum 1.包管理工具如何发现可以用的包 包管理工具依赖一系列软件源,工具下载源的信息存储在配置文件中,其位置随某包管理工具不同而变化 使用yum的RedHat/Cent ...
- CentOS 7.6 使用kubeadm安装Kubernetes 13
实验环境:VMware Fusion 11.0.2 操作系统:CentOS 7.6 主机名 IP地址 CPU 内存 k8s2m 172.16.183.151 2核 4G k8s2n 172.16.18 ...
- 使用kubeadm 安装 kubernetes 1.12.0
目录 简介: 架构说明: 系统配置: 1.1 关闭防火墙 1.2 禁用SELinux 1.3 关闭系统Swap 1.4 安装docker 使用kubeadm部署Kubernetes: 2.1 安装ku ...
- Centos7.2/7.3集群安装Kubernetes 1.8.4 + Dashboard(转)
原文https://www.cnblogs.com/burningTheStar/p/7865998.html 1.环境配置 结点数量:3 结点系统:CentOS 7.2 / 7.3 2.效果展示 3 ...
随机推荐
- pg 判断表或者模式是否存在 满足条件后执行创建表sql
记录一下. 是这么个事,执行初始化脚本的时候报错了 ,原因是引用了其他模式下的表,但是这个模式还没有创建,就导致我有个视图无法创建. 其实这玩意有两个方法,要不然就判断下其他模式下的脚本是否存在,存在 ...
- Centos下多种PHP拓展安装方法
http://my.oschina.net/u/2400083/blog/518195
- java-Spring事务管理、SH整合
程序中事务控制 事务控制概述 编程式事务控制 自己手动控制事务,就叫做编程式事务控制. Jdbc代码: Conn.setAutoCommite(false); // 设置手动控制事务 Hibernat ...
- java ColorChooser
简介 java 核心编程 创建了三个chooser.一个是模态,一个是非模态,一个是非模态实时. 放入别的frame 进行了展示 image code /* * @Author: your name ...
- SciTech-Wireless-WiFi-WDS(无线路由桥接扩网)两个路由器无线桥接(WDS)要点
两个路由器无线桥接(WDS)要点 当上网点距离路由器有好几道墙,连接WiFi信号很差时: 可用另外一个路由器无线桥接(大多数路由器的WDS功能)到主路由器(连光猫连接的路由器), 扩大主WiFi路由器 ...
- 实用Linux命令记录
ss统计网络连接情况 [root@Dev-8.8.8.8 ~]# ss -tan |awk 'NR>1 {++sum[$1]} END{for(i in sum) print i"\t ...
- 算法练习(19)-单源最短路径dijkstra算法
如上图,先初始化1个图,每条边上的红色数字为路径权重:(Node,Edge的定义参见算法练习(17)-图的广度优先遍历/深度优先遍历) Graph init() { List<Node> ...
- JAVA基础-11-封装 继承 多态--九五小庞
1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义 ...
- 进阶篇:3.1.2.5)DFM-注塑模具钢材选择;
本章目的:了解常用的注塑模具钢材牌号 注塑模具开模,钢材的选择不仅影响模具的使用寿命,也会影响开模的成本.有些特性塑料产品,可能还需要用到特定的材料.因为,开注塑模具,材料的选择尤为重要.以下是几种常 ...
- Unity 编辑器格子工具
using UnityEditor; using UnityEngine; public class CustomGridWindow3 : EditorWindow { private Textur ...