hyper-v虚拟机上的centos多节点k8s集群实践
之前体验了minikube,掉深坑里至今还没有爬出来,玩单节点用minikube够了,
但傻瓜试的安装让人对k8s理解不是很深刻(坑),而且多节点好像有什么奇怪的问题
所以我这次要用两个虚拟机来模拟k8s集群 一主节点一工作节点
hostname ipaddr cpu 硬盘 内存 OS docker k8s
m1 1921.168.1.200 2 20G 2G centos7 18 1.16.2
w1 1921.168.1.201 2 20G 2G centos7 18 1.16.2
由于我使用的虚拟机驱动是hyper-v 所以要记得每个虚拟机关闭动态内存 关于虚拟机的安装配置这里就不再深入讨论
虚拟机交换机

动态内存关闭

我先创建一个虚拟机,安装完docker,k8s和一些其他配置后,再复制,这样比较快一点
但是k8s集群里的节点 mac和uuid不能重复,这个到时再想办法修改
安装centos时选择最小安装,图形界面不安装,这样比较省计算机资源
最小安装完成重启后, 需要做的事情 1.修改网卡为开机自动启动,2.打开ssh
先来打开ssh吧, hyper-v里面操作不方便 我要用powersheel连接上去
vi /etc/ssh/sshd_config
取消两行注,由于我是用root登录,所以要将permitrootlogin设置成yes

重启服务
service sshd restart
接下来把网卡设置成开机自启,因为现在网卡是没有启动的
先ip addr 查一下网卡名称 然后进入到 /etc/sysconfig/network-scripts/目录 ls|grep 网卡名称

原来的配置为 动态获取ip,不开机自动启动

修改成,开机自动启动, 静态ip

修改hosts文件
vi /etc/hosts
在后面加上两个节点的host
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.200 m1
192.168.1.201 w1
保存后
reboot 指令重启
管理员权限打开powershell 输入ssh root@192.168.1.200连接
如果出现

到用户目录/.ssh/known_hosts 编辑删除现有ip的那一行重连即可
连上来后,先更新yum
install -y yum-utils device-mapper-persistent-data lvm2
yum update
再设置docker仓储
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
然后安装18版本的docker,安装太高k8s用不了
yum install docker-ce-18.09. docker-ce-cli-18.09. containerd.io
安装完成后 设置启动docker并设置开机启动
systemctl start docker && systemctl enable docker
接下来设置docker 的镜像源, 否则将被墙
[root@localhost ~]# mkdir -p /etc/docker
[root@localhost ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://自己去注册自己的不懂百度.mirror.aliyuncs.com"]
> }
> EOF
把daemon.json 改名为daemon.conf
mv /etc/docker/daemon.json /etc/docker/daemon.conf
设置好重启一下docker
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
最后设置k8s相关的配置 先设置hostname 为主节点 m1 (master node
[root@localhost ~]# hostnamectl set-hostname m1
重新登录一下验证是否修改成功
[root@localhost ~]# exit
logout
Connection to 192.168.1.200 closed.
PS C:\WINDOWS\system32> ssh root@192.168.1.200
root@192.168.1.200's password:
Last login: Mon Nov :: from 192.168.1.104
[root@m1 ~]#
关防火墙
[root@m1 ~]# systemctl stop firewalld
[root@m1 ~]# systemctl disable firewalld
禁用swap
[root@m1 ~]# swapoff -a
[root@m1 ~]# sed -i.bak '/swap/s/^/#/' /etc/fstab
修改网桥模式
[root@m1 ~]# sysctl net.bridge.bridge-nf-call-iptables=
[root@m1 ~]# sysctl net.bridge.bridge-nf-call-ip6tables=
[root@m1 ~]# cat <<EOF > /etc/sysctl.d/k8s.conf
> net.bridge.bridge-nf-call-ip6tables =
> net.bridge.bridge-nf-call-iptables =
> EOF
[root@m1 ~]# sysctl -p /etc/sysctl.d/k8s.conf
给yum 加kubernetes 阿里云 镜像源
[root@m1 ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
> [kubernetes]
> name=Kubernetes
> baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
> enabled=
> gpgcheck=
> repo_gpgcheck=
> gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
> EOF
更新yum缓存
yum clean all
yum -y makecache
安装 kubeadm kubelet kubectl
- kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
- kubeadm 用于初始化集群,启动集群的命令工具
- kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
yum install -y kubelet-1.16. kubeadm-1.16. kubectl-1.16.
启动kubelet 并设置开机自动启动
[root@m1 ~]# systemctl enable kubelet && systemctl start kubelet
创建下载kubernetes镜像缓存脚本 ,并启动它下载
vi image.sh
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.16.2
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
docker pull $url/$imagename
docker tag $url/$imagename k8s.gcr.io/$imagename
docker rmi -f $url/$imagename
done
发现没有权限
[root@m1 ~]# ./image.sh
-bash: ./image.sh: Permission denied
给权限后重新执行脚本
chmod image.sh ./image.sh
结束后查看一下docker 的镜像
[root@m1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.16.2 8454cbe08dc9 weeks ago .1MB
k8s.gcr.io/kube-apiserver v1.16.2 c2c9a0406787 weeks ago 217MB
k8s.gcr.io/kube-controller-manager v1.16.2 6e4bffa46d70 weeks ago 163MB
k8s.gcr.io/kube-scheduler v1.16.2 ebac1ae204a2 weeks ago .3MB
k8s.gcr.io/coredns 1.3. eb516548c180 months ago .3MB
k8s.gcr.io/etcd 3.3. 2c4adeb21b4f months ago 258MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 months ago 742kB
说明下载正常
,接下来我要将这个虚拟机备份一下, 将来之前做的那些工作都可以用还原的方式略过了


然后我删除了虚拟机k8s-m1,因为我要重新规划保存的位置
把刚才导出的虚拟机导入

再导入一次,为工作节点

接下来把刚才导入的两个虚拟机再次删除,我们要的只是他硬盘里的数据, 否则 product_uuid会重复,所以我们要多做几步操作

添加 新的虚拟机,选择硬盘为刚才导入时选择的硬盘, 前面内存那里记得不要选动态内存,如法炮制 k8s-w1

这时两个虚拟机的静态ip是冲突的,我们启动第二台修改ip地址为192.168.1.201
vi /etc/sysconfig/network-scripts/ifcfg-eth0
hostname也修改成w1
hostnamectl set-hostname w1
修改好后reboot重启 顺便把k8s-m1也启动
删除C:\Users\hbb\.sshknown_hosts 后开两个管理员权限的ps 连接上m1 和w1
接下来我们两边都修改hosts文件,加入 我们规划好的ip 的别名
vi /etc/hosts

查看mac 和uuid是否冲突
cat /sys/class/net/eth0/address
cat /sys/class/dmi/id/product_uuid

都没有冲突了
接下来做主节点m1的配置,下面的操作只需要在m1上执行
kubeadm init --apiserver-advertise-address 192.168.1.200 --pod-network-cidr=192.168.0.0/
自动补全
[root@m1 ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
[root@m1 ~]# source .bash_profile
安装网络策略,
kubectl create -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml
默认情况下 master上不能安装pod,因为主节点上打上了污点
如果要在master上安装pod,则要把污点去掉
查看污点
[root@m1 ~]# kubectl describe node m1|grep -i taints
Taints: node-role.kubernetes.io/master:NoSchedule
删除默认的污点
[root@m1 ~]# kubectl taint nodes m1 node-role.kubernetes.io/master-
node/m1 untainted
打污点的语法有兴趣可以自己去研究,这里不再介绍太多
接下来就是工作节点 w1了
在我刚把m1 kubeinit时产生了一个 命令,可以复制去子节点上执行以加入 主节点
也可以手动创建
kubeadm token create --print-join-command

复制去工作节点上执行就可以直接加入主节点
工作节点执行效果如下

主节点查看node service pod compoent
[root@m1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
m1 Ready master 18m v1.16.2
w1 Ready <none> 11m v1.16.2
[root@m1 ~]# kubectl get svc --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> /TCP 18m
kube-system kube-dns ClusterIP 10.96.0.10 <none> /UDP,/TCP,/TCP 18m
[root@m1 ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-dc6cb64cb-856pv / Running 15m
kube-system calico-node-k259l / Running 12m
kube-system calico-node-z5wbs / Running 15m
kube-system coredns-5644d7b6d9-v8wjh / Running 19m
kube-system coredns-5644d7b6d9-z2zsw / Running 19m
kube-system etcd-m1 / Running 18m
kube-system kube-apiserver-m1 / Running 18m
kube-system kube-controller-manager-m1 / Running 18m
kube-system kube-proxy-b882q / Running 12m
kube-system kube-proxy-vxfxj / Running 19m
kube-system kube-scheduler-m1 / Running 17m
[root@m1 ~]# kubectl get cs -o json
接下来可以加入一些pod 测试 ,加入pod的方式有两种
使用yaml文件安装/卸载 -f后面接一个yaml文件,可以是网络路径
kubectl create -f kubernetes-dashboard.yaml
kubectl delete-f kubernetes-dashboard.yaml
一种是直接使用镜像,直接使用镜像比较少见
本人也还没有研究,可以参考这个地方
http://docs.kubernetes.org.cn/618.html
hyper-v虚拟机上的centos多节点k8s集群实践的更多相关文章
- Kubernetes : 多节点 k8s 集群实践
说明: 本文参考 『 Kubernetes 权威指南 』 第一章的案例. 需要说明的是, 这本书里有很多描述的东西和实践的案例不吻合. Kubernets 集群架构 架构图 Server List 节 ...
- rancher三节点k8s集群部署例子
rancher三节点k8s集群部署例子 待办 https://rorschachchan.github.io/2019/07/25/使用Rancher2-1部署k8s/
- 使用Rancher Server部署本地多节点K8S集群
当我第一次开始我的Kubernetes之旅时,我一直在寻找一种设置本地部署环境的方式.很多人常常会使用minikube或microk8s,这两者非常适合新手在单节点集群环境下进行操作.但当我已经了解了 ...
- 仅需60秒,使用k3s创建一个多节点K8S集群!
作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...
- 超强教程!在树莓派上构建多节点K8S集群!
在很长一段时间里,我对于在树莓派上搭建Kubernetes集群极为感兴趣.在网络上找到一些教程并且跟着实操,我已经能够将Kubernetes安装在树莓派上,并在三个Pi集群中工作.然而,在master ...
- centos 7 部署k8s集群
架构图: 前期准备 systemctl stop firewalldsystemctl disable firewalld yum -y install ntp systemctl start ntp ...
- K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造
点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 张振(守辰) ...
- VM虚拟机上 实现CentOS 6.X下部署LVS(DR)+keepalived实现高性能高可用负载均衡
一.简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. ...
- VM虚拟机上 实现CentOS 6.X下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 1 准备工作 a) 虚拟机上安装CentOS6.x操作系统,参考一下博客内容 http://www.cnblogs.com/seesea125 ...
随机推荐
- rpm -qa|grep nfs >/dev/null 2>&1作用
在使用一些shell命令是,经常会用到rpm -qa|grep nfs >/dev/null 2>&1之类的命令,该命令干嘛用的呢? 其实这个命令就是将rpm -qa|grep n ...
- 3D漫游的分类 3D Navigation Taxonomy
在2001年CHI发表的论文中1,Tan等人提出了一种对3D漫游的分类方法. 当时关于3D漫游(3D Navigation)的研究主要分为两种:一种是发掘有关漫游的认知原则,一种是开发一些具体的漫游技 ...
- 分布式系统的延时和故障容错之Spring Cloud Hystrix
本示例主要介绍 Spring Cloud 系列中的 Eureka,如何使用Hystrix熔断器容错保护我们的应用程序. 在微服务架构中,系统被拆分成很多个服务单元,各个服务单元的应用通过 HTTP 相 ...
- 一款功能强大的TCP/UDP工具---flynet
前言 前段时间做某个项目,由于涉及到tcp/udp方面的知识比较多,于是就索性趁热打铁,写个工具来强化相关知识.另外由于并非十分擅长Golang,所以也顺便再了解下Golang吧. 简介 flynet ...
- Cocos Creator 3D 打砖块教程(二) | 子弹发射与摄像机平滑移动
在线体验链接: http://example.creator-star.cn/block3d/ 前面一篇文章,我们讲了[打砖块]游戏中的3D物体的场景布局.材质资源.物理刚体与碰撞组件,接下来本篇文章 ...
- 对BUG的分析与理解
对BUG的分析与理解 bug的分类 bug,其实就是软件期望的行为与实际行为的差异.从程序的角度来看,在软件整个生命周期中都会有bug的出现.需求分析过程中,需求理解的不足,导致的理解错位 ,遗漏甚至 ...
- 【TencentOS tiny】深度源码分析(4)——消息队列
消息队列 在前一篇文章中[TencentOS tiny学习]源码分析(3)--队列 我们描述了TencentOS tiny的队列实现,同时也点出了TencentOS tiny的队列是依赖于消息队列的, ...
- Java求和的整体思路
一. 设计思想: 设计这个程序我们需要考虑到参数的输入,并且可以输入多个参数,以及为用户考虑到各种的边界问题.首先第一步我们应该给出输入参数的语句,让用户可以输入.第二步我们应对其进行参数个数的 ...
- 算法学习之剑指offer(十)
一 题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3 ...
- 程序员IT狗有什么副业可以做呢?
1. 开篇 副业有很多,全网有做什么公众号.闲鱼.手机卡,各种各样的都有,大部分是骗子,小部分是通过自己的努力,获得了成功. 从年初就开始实践如何做一个自由职业者,近大半年有一些感受正好一起分享交流一 ...