Kubernetes 系列(一):本地k8s集群搭建
我们需要做以下工作:
(1)安装VMware,运行CentOs系统,一个做master,一个做node。
(2)安装K8s。
(3)安装docker和部分镜像会需要访问外网,所以你需要做些网络方面的准备工作,大家可以去某宝找一下,或者在网络上找别人下好的也可以。
一、安装VMware
官网地址:https://my.vmware.com/zh/web/vmware/downloads (网上有很多自带破解的下载,大家也可以找一下)
我这里下载的是VM15(安装和新建虚拟机的步骤就跳过了,我也是百度的)
虚拟机配置:2核2G
CentOs下载地址:https://www.centos.org/download/

1.如果是win10系统,需要关闭Hyper-V。
2.为了方便操作,我这里是通过cmd来操作vw的Linux命令,用到了以下两个工具:
安装 chocolate ( https://chocolatey.org/):
管理员方式启动CMD,运行以下命令安装chocolate :
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
安装完chocolate 后还需要安装 ssh terminals (https://chocolatey.org/packages/terminals),直接CMD运行以下命令就可以:
choco install terminals
顺便说下如何修改Linux主机名称:
hostnamectl set-hostname 新主机名
二.配置Linux
(1)开启网卡(设置完需要重启):
vi /etc/sysconfig/network-script/ifcfg-eth33 ONBOOT=yes
(2)安装net-tool包:
yum install net-tools
(3)使用cmd通过ssh连接Linux:
首先通过ifconfig查看当前Linux的ip,然后在cmd中运行以下命令(管理员模式):
ssh root@IP
(4)关闭所有节点的SELinux
/etc/selinux/config SELINUX=disabled
(5)关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
(6)关闭swap
vi /etc/fstab 在行首加 #,注释该行

(7)完成第6步后重启,然后设置iptables
vi /etc/sysctl.conf net.bridge.bridge-nf-call-iptables = sudo sysctl -p
三.安装Docker
(1)下载安装
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker
最后一步下载docker-ce因为是外网,所以会有网络问题,大家八仙过海各显神通哈,从阿里云下载也可以的,总之版本越新越好,我这里是18.09,完成后通过以下命令查看下:
docker -v
(2)配置docker加速器
加速器怎么配置就不说了,这里是我的阿里云加速地址,大家可以自行替换,然后我们还需要指定下k8s的下载地址:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://bbw0jgk7.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
cat>>/etc/yum.repos.d/kubrenetes.repo<<EOF [kubernetes] name=Kubernetes Repo baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ gpgcheck= gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg EOF
(3)安装:
yum install -y kubeadm kubelet kubectl
(4)设置开机启动
systemctl start docker.service systemctl enable docker.service systemctl enable kubelet.service
(5)初始化k8s
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/ \
--ignore-preflight-errors=cri \
--kubernetes-version=1.13.
(6)配置下变量
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
(7)重启
docker restart $(docker ps -a -q)
到这一步我们已经可以用以下命令查看集群信息:
kubectl get node
这个时候只有一个master节点,而且Status是NotReady状态,这是因为没有安装网络组件的原因,我们需要安装下
(8)始化网络插件 Flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
同样这一步也需要访问外网下载镜像,配置了阿里云加速也没用的,网上还有有种在yml文件里配置的方式可以通过阿里云下载,我也不是很清楚,大家可以搜下。
这一步执行完成后,master的Status状态就会变为Ready,master配置就完成了。
(9)配置Node
Node的配置和master一样,需要下载docker、kubectl等,但是只需要执行到上面的第(4)步就OK了。
(10)通过以下命令将node加入集群
kubeadm join 192.168.3.131: --token s87gto.ruxhofion1qemfte --discovery-token-ca-cert-hash sha256:ef0333ddcc5ade8541544de89333ab81b20ae96b0345f9a55185eb95e3837905
这个命令第(5)步初始化k8s完成后会自己输出出来,需要注意的是里面的token字段,如果大家忘了token是啥,在master上执行以下命令查看:
kubeadm token list
或者我们也可以在master节点新建token:
kubeadm create token
但是需要注意的是默认情况下,通过 kubeadm create token 创建的 token ,过期时间是24小时,这就是为什么过了一天无法再次使用之前记录的 kube join 原生脚本的原因,也可以运行 kubeadm token create --ttl 0生成一个永不过期的 token,详情请参考:kubeadm-token。
然后通过kubectl get node命令就可以看到Node的节点信息了。
如果成功将node加入了集群,但是在master上看不到,参考下:https://www.cnblogs.com/justmine/p/8886675.html
最终运行结果:


四.本地安装Kubectl
kubectl可以用来帮助我们本地连接管理集群,这里我们也是通过choco来进行安装,CMD管理员模式运行以下命令:
choco install kubernetes-cli
安装完成后通过以下命令检查是否成功:
kubectl version
这个时候呢还是不成功的,因为用户证书不匹配,我们还需要做以下工作,连接到master运行以下命令查看admin用户证书:
cd /etc/kubernetes/ cat admin.conf
OK,复制下这个配置文件的内容,默认情况下你应该只有一个admin用户的信息,我们需要用这个替换本地的配置文件内容。
在C:\Users\Administrator\.kube路径下有一个conig文件,替换掉里面的内容(里面默认只有一个admin用户信息,可以直接替换掉,如果你还有其他的用户上下文信息啥的,那就在后面按格式追加)
这样完成后再次通过kubectl version命令就可以查看到以下内容了:

到这里我们就无需通过连接到master来管理k8s集群了,在本地就可以:

四.安装dashboard
首先我们需要准备一个dashboard.yaml,我们通过NodePort暴露端口的方式部署dashboard,这样就不需要启动代理:
# Copyright The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License. # Configuration to deploy release version of the Dashboard UI compatible with
# Kubernetes 1.8.
#
# Example usage: kubectl create -f <this_file> # ------------------- Dashboard Secret ------------------- # apiVersion: v1
kind: Secret
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-certs
namespace: kube-system
type: Opaque ---
# ------------------- Dashboard Service Account ------------------- # apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system ---
# ------------------- Dashboard Role & Role Binding ------------------- # kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kubernetes-dashboard-minimal
namespace: kube-system
rules:
# Allow Dashboard to create 'kubernetes-dashboard-key-holder' secret.
- apiGroups: [""]
resources: ["secrets"]
verbs: ["create"]
# Allow Dashboard to create 'kubernetes-dashboard-settings' config map.
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["create"]
# Allow Dashboard to get, update and delete Dashboard exclusive secrets.
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs"]
verbs: ["get", "update", "delete"]
# Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
- apiGroups: [""]
resources: ["configmaps"]
resourceNames: ["kubernetes-dashboard-settings"]
verbs: ["get", "update"]
# Allow Dashboard to get metrics from heapster.
- apiGroups: [""]
resources: ["services"]
resourceNames: ["heapster"]
verbs: ["proxy"]
- apiGroups: [""]
resources: ["services/proxy"]
resourceNames: ["heapster", "http:heapster:", "https:heapster:"]
verbs: ["get"] ---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: kubernetes-dashboard-minimal
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: kubernetes-dashboard-minimal
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system ---
# ------------------- Dashboard Deployment ------------------- # kind: Deployment
apiVersion: apps/v1beta2
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
replicas:
revisionHistoryLimit:
selector:
matchLabels:
k8s-app: kubernetes-dashboard
template:
metadata:
labels:
k8s-app: kubernetes-dashboard
spec:
containers:
- name: kubernetes-dashboard
image: registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
ports:
- containerPort:
protocol: TCP
args:
- --auto-generate-certificates
# Uncomment the following line to manually specify Kubernetes API server Host
# If not specified, Dashboard will attempt to auto discover the API server and connect
# to it. Uncomment only if the default does not work.
# - --apiserver-host=http://my-address:port
volumeMounts:
- name: kubernetes-dashboard-certs
mountPath: /certs
# Create on-disk volume to store exec logs
- mountPath: /tmp
name: tmp-volume
livenessProbe:
httpGet:
scheme: HTTPS
path: /
port:
initialDelaySeconds:
timeoutSeconds:
volumes:
- name: kubernetes-dashboard-certs
secret:
secretName: kubernetes-dashboard-certs
- name: tmp-volume
emptyDir: {}
serviceAccountName: kubernetes-dashboard
# Comment the following tolerations if Dashboard must not be deployed on master
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule ---
# ------------------- Dashboard Service ------------------- # kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
ports:
- port:
targetPort:
selector:
k8s-app: kubernetes-dashboard
然后我们还需要一个用户权限的user.yaml,它用来绑定角色权限:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: default
namespace: default
运行这两个yaml文件:
kubectl apply -f dashboard.yaml kubectl apply -f user.yaml
查看dashborad的端口:
kubectl get svc -n kube-system

我这里是32166端口,然后我们只需要用master机器的IP+这里的32166端口就可以访问了,因为我们用的是假的证书,谷歌浏览器会阻止,所以我们需要使用火狐浏览器,火狐浏览器默认也会阻止,点击高级-添加例外,就可以访问到以下界面:

我们需要使用Token令牌,我们可以通过以下命令查看令牌信息:
kubectl get secret

这里只是给出了令牌名称,具体的令牌需要用以下命令查看:
kubectl describe secret (默认显示第一个) 或者 kubectl describe secret default-token-2qfb8

复制标记出来的token内容,粘贴到令牌那里就可以了:

OK,暂时到此结束,后期有新进展再更新。
Kubernetes 系列(一):本地k8s集群搭建的更多相关文章
- K8S集群搭建
K8S集群搭建 摘要 是借鉴网上的几篇文章加上自己的理解整理得到的结果,去掉了一些文章中比较冗余的组件和操作,力争做到部署简单化. K8S组件说明 Kubernetes包含两种节点角色:master节 ...
- k8s集群搭建(三)
Dashboard安装 Kubernetes Dashboard是k8s提供基于Web的监控和操作界面,可以通过UI来显示集群的所有工作负载,除了查看资源,还是创建.编辑.更新.删除资源. 根据Kub ...
- Kubernetes 远程工具连接k8s集群
Kubernetes 远程工具连接k8s集群 1.将Master的kubectl文件复制到Node内 scp k8s/kubernetes/server/bin/kubectl root@192.16 ...
- 基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群一 环境准备
本k8s集群参考了 Michael 的 https://gitee.com/pa/kubernetes-ha-kubeadm-private 这个项目,再此表示感谢! Michael的项目k8s版本为 ...
- 使用kind快速搭建本地k8s集群
Kind是什么? k8s集群的组成比较复杂,如果纯手工部署的话易出错且时间成本高.而本文介绍的Kind工具,能够快速的建立起可用的k8s集群,降低初学者的学习门槛. Kind是Kubernetes I ...
- K8S集群搭建——基于CentOS 7系统
环境准备集群数量此次使用3台CentOS 7系列机器,分别为7.3,7.4,7.5 节点名称 节点IPmaster 192.168.0.100node1 192.168.0.101node2 192. ...
- 高可用k8s集群搭建
虚拟机选择 Win10 Hyper-V 总体架构 三个master,三个node master的组件 etcd kube-apiserver kube-controller-manager kube- ...
- k8s集群搭建(一)
k8s简介 kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写.是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简 ...
- k8s集群搭建过程详解
准备工作 安装CentOS7虚拟机 略 安装Docker 略 关闭CentOS7自带的防火墙服务 systemctl disable firewalld systemctl stop firewall ...
随机推荐
- Python数据类型详解——列表
Python数据类型详解--列表 在"Python之基本数据类型概览"一节中,大概介绍了列表的基本用法,本节我们详细学一下列表. 如何定义列表:在[]内以英文里输入法的逗号,,按照 ...
- NLP(二十) 利用词向量实现高维词在二维空间的可视化
准备 Alice in Wonderland数据集可用于单词抽取,结合稠密网络可实现其单词的可视化,这与编码器-解码器架构类似. 代码 from __future__ import print_fun ...
- CodeForces-38B-Chess枚举+思维
CodeForces-38B-Chess 这是一道与下象棋有关的题目,题意是给你一个车和马的坐标,然后再给你一个马,让你判断最后三者都不会被吃掉的可能性,注意的是三者是三个独立的个体. 这道题要知道一 ...
- 2019 Multi-University Training Contest 1
2019 Multi-University Training Contest 1 A. Blank upsolved by F0_0H 题意 给序列染色,使得 \([l_i,r_i]\) 区间内恰出现 ...
- 天梯杯 L2-023 图着色问题
L2-023. 图着色问题 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 图着色问题是一个著名的NP完全问题.给定无向图 G ...
- PAT 天梯杯 L3-008. 喊山 bfs
L3-008. 喊山 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂 ...
- java中最容易犯错的特殊字符
问题背景 能准确说出下面的java 执行完毕后会打印出什么? System.out.println( String.class.getName()+ ".class"); Syst ...
- PHP如何解决表单重复提交
利用session 表单隐藏域中存放session(表单被请求时生成的标记).采用此方法在接收表单数据后,检查此标志值是否存在,先进行删除,然后处理数据; 若不存在,说明已提交过,忽略本次提交. ...
- js关系运算符的用法和区别
var num = 1; var str = '1'; var test = 1; test == num //true 相同类型 相同值 test === num //true ...
- Python入门基础:七段数码管绘制
1.在学习Python的过程中,运用所学的一些基础知识,进行一些简单的编程,可以收获很多乐趣.在生活中,LED灯无处不在,荧幕显示的广告词,给我们呈现出动态的视觉效果.下面,则以最简单的显示日期为例, ...