之前体验了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集群实践的更多相关文章

  1. Kubernetes : 多节点 k8s 集群实践

    说明: 本文参考 『 Kubernetes 权威指南 』 第一章的案例. 需要说明的是, 这本书里有很多描述的东西和实践的案例不吻合. Kubernets 集群架构 架构图 Server List 节 ...

  2. rancher三节点k8s集群部署例子

    rancher三节点k8s集群部署例子 待办 https://rorschachchan.github.io/2019/07/25/使用Rancher2-1部署k8s/

  3. 使用Rancher Server部署本地多节点K8S集群

    当我第一次开始我的Kubernetes之旅时,我一直在寻找一种设置本地部署环境的方式.很多人常常会使用minikube或microk8s,这两者非常适合新手在单节点集群环境下进行操作.但当我已经了解了 ...

  4. 仅需60秒,使用k3s创建一个多节点K8S集群!

    作者: Dawid Ziolkowski丨Container Solution云原生工程师 最近,我一直在Kubernetes上进行各种测试和部署.因此,我不得不一次又一次创建和销毁Kubernete ...

  5. 超强教程!在树莓派上构建多节点K8S集群!

    在很长一段时间里,我对于在树莓派上搭建Kubernetes集群极为感兴趣.在网络上找到一些教程并且跟着实操,我已经能够将Kubernetes安装在树莓派上,并在三个Pi集群中工作.然而,在master ...

  6. centos 7 部署k8s集群

    架构图: 前期准备 systemctl stop firewalldsystemctl disable firewalld yum -y install ntp systemctl start ntp ...

  7. K8s 集群节点在线率达到 99.9% 以上,扩容效率提升 50%,我们做了这 3 个深度改造

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 张振(守辰) ...

  8. VM虚拟机上 实现CentOS 6.X下部署LVS(DR)+keepalived实现高性能高可用负载均衡

    一.简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. ...

  9. VM虚拟机上 实现CentOS 6.X下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 1 准备工作 a) 虚拟机上安装CentOS6.x操作系统,参考一下博客内容 http://www.cnblogs.com/seesea125 ...

随机推荐

  1. JS/JQuery 文档加载完成

    1. $(function(){...}); 文档树加载完执行的方法:(注意:不包括图片.css.js等文件): 一个页面中可以有多个$(function(){...}); 方法: 两种写法: //第 ...

  2. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU特性那些事(5)- 划时代新品RT1170

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的划时代新品i.MXRT1170. 自2017年开始,每年的6月25日恩智浦都会在北京举行微控制 ...

  3. WebGL简易教程(七):绘制一个矩形体

    目录 1. 概述 2. 示例 2.1. 顶点索引绘制 2.2. MVP矩阵设置 2.2.1. 模型矩阵 2.2.2. 投影矩阵 2.2.3. 视图矩阵 2.2.4. MVP矩阵 3. 结果 4. 参考 ...

  4. 死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...

  5. Chrome 浏览器默认样式覆盖自己 CSS 样式的解决

    检查 HTML 源代码,DOCTYPE 的声明是否写正确. HTML5 的 DOCTYPE 声明规范: <!DOCTYPE html> 参考链接: css - User agent sty ...

  6. js悬浮、回到顶部

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 588 div2 C. Anadi and Domino

    C. Anadi and Domino 题目链接:https://codeforces.com/contest/1230/problem/C Anadi has a set of dominoes. ...

  8. Cocos Creator 通用框架设计 —— 网络

    在Creator中发起一个http请求是比较简单的,但很多游戏希望能够和服务器之间保持长连接,以便服务端能够主动向客户端推送消息,而非总是由客户端发起请求,对于实时性要求较高的游戏更是如此.这里我们会 ...

  9. 【NOIP模拟赛】小奇挖矿 2

    [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿石交易市场,以便为飞船升级无限非概率引擎. [问题描述] 现在有m+1个星球,从左到右标号为0到m,小奇最初在0 ...

  10. 基于mosquitto的MQTT客户端实现C语言

    在对MQTT的学习过程中 一下的内容对我提供了帮助 https://www.runoob.com/w3cnote/mqtt-intro.html 对MQTT的入门级介绍 很基础讲解了什么是MQTT h ...