Hyper-v搭建K8s v1.18.6 单主集群环境(包括dashboard)
一、配置基本环境:
环境配置:
- Windows 10 Hyper-V虚拟化;
- 创建3个虚拟机(CentOS Linux release 7.8),1个用于master节点,2个用于work节点;master配置2CPU\4GB内存\3个网卡,Work node配置2CPU\2GB内存\3个网卡;
1、Hyper-v网络环境配置:配置3个虚拟交换机;
因Hyper-v dafault Switch虚拟交换机与桥接的网络,不能配置固定IP,如将这个网络用于node的管理网络,那该网卡只能是从DHCP获取,IP会变动,为在后续测试中带来不必要的麻烦,因此建议增加一个独立的内部管理网络,用于设置固定IP,且同时保留default Switch用于node虚拟机访问Internet外网;
以上交换机名称信息可自行定义
2、安装Centos虚拟机
3个vm:k8s-node01、k8s-node02、k8s-node03;
操作系统版本:CentOS Linux release 7.8.2003 (Core)
3、每台VM配置3个网卡
eth0:主要用于Node管理网络、node与Hyper-v宿主机互通、为POD提供外网访问;
eth1:主要用于node内部专有通讯网络;
eth2:主要用于node虚拟机访问Internet互联网,可以下载软件或镜像;
IP配置信息如下:
K8s-node01 :eth0:172.25.83.130, eth1:10.0.0.1, eth2:自动获取DHCP地址
K8s-node02 :eth0:172.25.83.133, eth1:10.0.0.2, eth2:自动获取DHCP地址
K8s-node03:eth0: 172.25.83.131, eth1:10.0.0.3, eth2:自动获取DHCP地址
注意:多网卡下,如果发现不能访问Internet互联网,需检查路由信息,第一条默认的路由信息必须为eth2,其实只要eth0与eth1网卡在配置固定IP时不用配置网关即可,这样可以保证第一条默认路由为eth2;如下路由示图:
3个VM的网卡配置信息截图:
4、为每个node关闭防火墙
systemctl stop firewalldsystemctl disable firewalld
5、为每个node关闭selinux:
cat /etc/selinux/configsed -i 's/enforcing/disabled/' /etc/selinux/configcat /etc/selinux/configsetenforce 0
6、为每个node关闭swap内存
swapoff -a #关闭临时的
cat /etc/fstab
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久关闭
cat /etc/fstab
7、为每个node重命名
hostnamectl set-hostname k8s-node01hostnamectl set-hostname k8s-node02hostnamectl set-hostname k8s-node03
8、为每个node添加主机名与IP对应关系
vim /etc/hosts
172.25.83.130 k8s-node01
172.25.83.133 k8s-node02
172.25.83.131 k8s-node03
9、为每个node桥接的IPV4流量传递到iptables的链:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
EOFsysctl --system #让系统应用以上规则
10、为每个node配置本地时间
yum install -y ntpdatentpdate time.windows.comdate
11、给VM配置还原点保存当前状态,便于后面出问题可以恢复到当前状态。
二、配置容器环境(每个节点上都需执行)
1、卸载docker,确保每个node的干净的
yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
2、安装Docker的前置依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置docker yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#默认是国外的,下载比较慢,建议使用阿里云的源安装docker
4、更新yum软件包索引
yum makecache fast
5、安装docker社区版,以及docker-cli
yum install -y docker-ce docker-ce-cli containerd.io
6、启动docker
systemctl start docker
7、查看docker版本信息(判断是否安装成功)
docker version
8、默认镜像是从Docker Hub下载,国内比较慢,推荐使用自己的阿里云加速
mkdir -p /etc/dockervim /etc/docker/daemon.json {"registry-mirrors": ["https://qt4cct09.mirror.aliyuncs.com"] #该地址可以通过阿里云自己创建;}
systemctl daemon-reload
systemctl restart docker
docker info检查配置的加载地址
8、设置docker开机自启动
systemctl enable docker
三、安装K8s基本工具(每个节点上都需执行)
1、配置阿里云yum源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
yum clean all
yum makecache
2、安装kubelet\kubeadm\kubectl
yum install -y kubelet kubeadm kubectl
yum install epel-release (如果上面安装过程找不到到安装包,需要执行该操作)
3、配置kubelet开机启用
systemctl enable kubelet
systemctl start kubelet
4、检查kubelet服务状态
systemctl status kubelet #(因没有配置好其他环境,检查状态是失败的)
四、部署k8s-master(仅在Master node节点上执行)
1、master节点初始化
kubeadm init --kubernetes-version=1.18.0 \
--apiserver-advertise-address=172.25.83.130 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16
POD的网段为: 10.122.0.0/16, api server地址就是master本机IP。
这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址。
2、初始化完成后,根据提示创建kubectl
[root@master01 ~]# mkdir -p $HOME/.kube
[root@master01 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master01 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
3、使kubectl可以自动补齐命令
[root@master01 ~]# source <(kubectl completion bash) #可按tab键补齐命令
4、查看节点,pod
[root@master01 ~]# kubectl get node #只会显示Default名称空间的pod;
[root@master01 ~]# kubectl get pod --all-namespaces
注意:node节点为NotReady,因为coredns pod没有启动,且缺少网络pod;
5、将node02与node03加入该集群:
master节点初始化完后会提示以下信息,将命令在node02与node03上执行后会自动加入该集群,以下证书2小时内有效)
kubeadm join 172.25.83.130:6443 --token c9pnxh.kcmwarwb84osgntg \--discovery-token-ca-cert-hash sha256:2f4469200b4204cf7999c1c2fd5e8f2b8b003dc439d3b49ad8555d433a9c638c #证书可一般2小时内有效,建议在master初始化完成就将其他节点加入集群;
实时监控node加入集群的状态
watch kubectl get pod -n kube-system -o wide
查看nods状态
kubectl get nods
因没有安装K8s内部网络资源,node节点显示为未准备状态;
6、安装calico网络
[root@master01 ~]# kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
7、查看节点,pod
需要等待calico网络处于运行状态,才能进行下一步操作。
[root@master01 ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-555fc8cc5c-k8rbk 1/1 Running 0 36s
kube-system calico-node-5km27 1/1 Running 0 36s
kube-system coredns-7ff77c879f-fsj9l 1/1 Running 0 5m22s
kube-system coredns-7ff77c879f-q5ll2 1/1 Running 0 5m22s
kube-system etcd-master01.paas.com 1/1 Running 0 5m32s
kube-system kube-apiserver-master01.paas.com 1/1 Running 0 5m32s
kube-system kube-controller-manager-master01.paas.com 1/1 Running 0 5m32s
kube-system kube-proxy-th472 1/1 Running 0 5m22s
kube-system kube-scheduler-master01.paas.com 1/1 Running 0 5m32s
[root@master01 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master01.paas.com Ready master 5m47s v1.18.0
以上操作到此,K8S集群是可以正常运行了。
接下来为k8s dashboard图形化展示工具的安装,也可以安装第三方的。
8 安装kubernetes-dashboard
a、官方部署dashboard的服务没使用nodeport,将yaml文件下载到本地,在service里添加nodeport
[root@master01 ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc7/aio/deploy/recommended.yaml #下载dashboard yaml官方模板
[root@master01 ~]# vim recommended.yaml #需要修改信息,才能提供访问;
kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:type: NodePort #增加NodePort端口ports:- port: 443targetPort: 8443nodePort: 30000 #该数字可自定义selector:k8s-app: kubernetes-dashboard
如下载yaml文件失败,则需要配置raw.githubusercontent.com主机IP,
vi /etc/hosts文件添加如下地址表:
**# GitHub Start**
52.74.223.119 github.com
192.30.253.119 gist.github.com
54.169.195.247 api.github.com
185.199.111.153 assets-cdn.github.com
151.101.76.133 raw.githubusercontent.com
151.101.108.133 user-images.githubusercontent.com
151.101.76.133 gist.githubusercontent.com
151.101.76.133 cloud.githubusercontent.com
151.101.76.133 camo.githubusercontent.com
151.101.76.133 avatars0.githubusercontent.com
151.101.76.133 avatars1.githubusercontent.com
151.101.76.133 avatars2.githubusercontent.com
151.101.76.133 avatars3.githubusercontent.com
151.101.76.133 avatars4.githubusercontent.com
151.101.76.133 avatars5.githubusercontent.com
151.101.76.133 avatars6.githubusercontent.com
151.101.76.133 avatars7.githubusercontent.com
151.101.76.133 avatars8.githubusercontent.com
**# GitHub End**
b、创建dashboard pod:
[root@master01 ~]# kubectl create -f recommended.yamlnamespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
#显示创建成功后的信息
c、查看pod,service(确认正常)
[root@master01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-dc6947fbf-869kf 1/1 Running 0 37s
kubernetes-dashboard-5d4dc8b976-sdxxt 1/1 Running 0 37s
[root@master01 ~]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.10.58.93 <none> 8000/TCP 44s
kubernetes-dashboard NodePort 10.10.132.66 <none> 443:30000/TCP 44s
[root@master01 ~]#
d、查看凭证
kubectl -n kubernetes-dashboard get secret
e、获取浏览器访问dashboard站点的Toke
[root@k8s-node01 ~]# kubectl describe secrets -n kubernetes-dashboard kubernetes-dashboard-token-9cjt2 | grep token | awk 'NR==3{print $2}'
#如下是我部署dashboard的toke信息
eyJhbGciOiJSUzI1NiIsImtpZCI6IjM5XzE5WFZscG5DTlVmWTZMRGo2UE8xdFl4dVNwTkJKUTQzeEZwQWY5UW8ifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi05Y2p0MiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjgzOGJmNWQzLTgzOGItNGY1YS04OGZiLTRiNjVlNjVkNjFmNyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.Oxpu_3fkXj51rsqhWx70wS7rCZC8fDJQLPNJbMl4zyTpRJyPUm0MFSf5DZBNZT9IcCrsIazSxI-EKfCzXWx8Vn9UijE9c6xAe8xxj6ITjDz65VIehN9VXClAWT5UUJ9km4eqNl76yexTq0kzK_uI0XS9qQNLR4wnb2wIdehkHBylcXS-iSwB00ChWGfNx6jm8syvlllH3i3dDsxsC9BxFhnPQ3OQgRcXsJw0US0S08aJSnhmAa8uOhtO4ntd2zD161j91A7IZ9f2Uh7vee5Ph3giMVZGQDj3rnDodZ4_JIouM1i5uzOTj9Cg-loQZHRZYOi3aBWXcaHBJkee2n77jg
f、使用浏览器打开kubernetes Dashboard:
登录后如下展示,如果没有namespace可选,并且提示找不到资源 ,那么就是权限问题
以上问题是账号权限问题,解决方法:
kubectl create clusterrolebinding serviceaccount-cluster-admin --clusterrole=cluster-admin --user=system:serviceaccount:kubernetes-dashboard:kubernetes-dashboard
kubectl delete clusterrolebinding serviceaccount-cluster-admin #如之前权限创建有问题,可以使用该命令清理,再重新执行上面命令
查看日志:
kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-5d4dc8b976-8xqgk
dashboard正常状态:
g、查验集群状态
[root@k8s-node01 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-node01 Ready master 3h29m v1.18.6
k8s-node02 Ready <none> 57m v1.18.6
k8s-node03 Ready <none> 57m v1.18.6
[root@k8s-node01 ~]# kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system calico-kube-controllers-578894d4cd-rpcps 1/1 Running 0 3h14m
kube-system calico-node-kjfnn 1/1 Running 0 3h14m
kube-system calico-node-sx4h6 1/1 Running 0 57m
kube-system calico-node-wx9tq 1/1 Running 0 58m
kube-system coredns-7ff77c879f-6mwdf 1/1 Running 0 3h29m
kube-system coredns-7ff77c879f-zf46c 1/1 Running 0 3h29m
kube-system etcd-k8s-node01 1/1 Running 0 3h29m
kube-system kube-apiserver-k8s-node01 1/1 Running 0 3h29m
kube-system kube-controller-manager-k8s-node01 1/1 Running 0 3h29m
kube-system kube-proxy-54wtk 1/1 Running 0 57m
kube-system kube-proxy-xlv5k 1/1 Running 0 3h29m
kube-system kube-proxy-zz9jz 1/1 Running 0 58m
kube-system kube-scheduler-k8s-node01 1/1 Running 0 3h29m
kubernetes-dashboard dashboard-metrics-scraper-dc6947fbf-wsf2b 1/1 Running 0 110m
kubernetes-dashboard kubernetes-dashboard-5d4dc8b976-8xqgk 1/1 Running 0 110m
[root@k8s-node01 ~]# kubectl get svc --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.10.0.1 <none> 443/TCP 3h31m
kube-system kube-dns ClusterIP 10.10.0.10 <none> 53/UDP,53/TCP,9153/TCP 3h31m
kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.10.224.238 <none> 8000/TCP 111m
kubernetes-dashboard kubernetes-dashboard NodePort 10.10.66.138 <none> 443:30000/TCP 111m
到此k8s集群+Dashboard全部完成,以上信息如有错误,请指正,谢谢。
End.
Hyper-v搭建K8s v1.18.6 单主集群环境(包括dashboard)相关推荐
- K8S通过rook部署rook ceph集群、配置dashboard访问并创建pvc
Rook概述 Ceph简介 Ceph是一种高度可扩展的分布式存储解决方案,提供对象.文件和块存储.在每个存储节点上,将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进程.在Cep ...
- Kubeadm 快速搭建 k8s v1.24.1 集群(openEuler 22.03 LTS)
kubeadm 简介 kubeadm 是 Kubernetes(以下简称 k8s)官方提供的用于快速安装部署 k8s 集群的工具,伴随 k8s 每个版本的发布都会同步更新,kubeadm 会对集群配置 ...
- 实践练习二(必选):手动部署 OceanBase 单副本集群
说明 相关连接: https://open.oceanbase.com/blog/10900159 https://open.oceanbase.com/answer/detail?id=137006 ...
- [k8s] 第二章 十分钟带你搭建k8s集群环境
本章节主要介绍如何搭建kubernetes的集群环境 环境规划 集群类型 kubernetes集群大体上分为两类:一主多从和多主多从. 一主多从:一台Master节点和多台Node节点,搭建简单,但是 ...
- 学习笔记之-Kubernetes(K8S)介绍,集群环境搭建,Pod详解,Pod控制器详解,Service详解,数据存储,安全认证,DashBoard
笔记来源于观看黑马程序员Kubernetes(K8S)教程 第一章 kubernetes介绍 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署 ...
- k8s安装部署步骤_30分钟无坑部署K8S单Master集群
Jesse导读:11月9号,我在中国.NET开发者峰会(.NET Conf China 2019)上分享了之前ASP.NET Core和Kubernetes做微服务的经验,在10号的时候又联合张善友. ...
- 30分钟无坑部署K8S单Master集群
Jesse导读:11月9号,我在中国.NET开发者峰会(.NET Conf China 2019)上分享了之前ASP.NET Core和Kubernetes做微服务的经验,在10号的时候又联合张善友. ...
- docker-ce-v18.09.0+kubernetes-v1.15.1(k8s)集群环境+dashboard-v1.10.1搭建完整教程
一.k8s简介 什么是kubernetes 首先,他是一个全新的基于容器技术的分布式架构领先方案.Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docke ...
- 18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 LVS NAT模式搭建
2019独角兽企业重金招聘Python工程师标准>>> 18.6 负载均衡集群介绍 实现负载均衡集群的软件有:LVS.Keepalived.Nginx.haproxy等.其中LVS属 ...
最新文章
- 学术前沿 | 基于深度学习的视觉三维重建研究总结
- 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版...
- C++虚成员函数表vtable
- WEKA The workbench for machine learning
- SAP Fiori Launchpad tile里显示的数字的刷新间隔是在服务器端什么地方配置的
- java 一对多 socket_js作为websocket client,服务用java 点对点、一对多聊天
- JAVA并发编程的挑战
- 分别采用线性LDA、k-means和SVM算法对鸢尾花数据集和月亮数据集进行二分类可视化分析
- mysql汽车品牌系列_爬取汽车之家汽车品牌型号系列数据
- C语言入门——求n的阶乘
- html怎么设置左侧区域宽度,【CSS】左侧定宽、右侧宽度自适应布局
- 漫谈中国数字电视标准的诞生
- 【Python数据清洗】numpy.take()用法
- 蜗牛君漫聊设计模式---建造者模式
- maven中遇到的问题,报错
- 通往奥格瑞玛的道路(二分+迪杰斯特拉堆优化)
- E-puck2机器人系列教程-7.机器人本体STM32固件更新
- 我的4g网卡运行着GNU/Linux -- 某4g无线网卡的逆向工程与主线Linux移植 (二)
- 按键精灵脚本打包工具(自带热更新功能)方便有需要的人有教程有链接
- linux下有没有蜘蛛纸牌游戏,在Linux下可用Wine安装和运行蜘蛛纸牌、浩方电竞平台...