Kubernetes 系列(一):本地k8s集群搭建

咱们须要作如下工做:html

(1)安装VMware,运行CentOs系统,一个作master,一个作node。node

(2)安装K8s。linux

(3)安装docker和部分镜像会须要访问外网,因此你须要作些网络方面的准备工做,你们能够去某宝找一下,或者在网络上找别人下好的也能够。git

 

1、安装VMwaregithub

官网地址:https://my.vmware.com/zh/web/vmware/downloads  (网上有不少自带破解的下载,你们也能够找一下)web

我这里下载的是VM15(安装和新建虚拟机的步骤就跳过了,我也是百度的)docker

虚拟机配置:2核2Gshell

CentOs下载地址:https://www.centos.org/download/  express

 

1.若是是win10系统,须要关闭Hyper-V。apache

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 = 1 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=0 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/16 \ --ignore-preflight-errors=cri \ --kubernetes-version=1.13.0

(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:6443 --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 2017 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: 1 revisionHistoryLimit: 10 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: 8443 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: 8443 initialDelaySeconds: 30 timeoutSeconds: 30 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: 443 targetPort: 8443 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,暂时到此结束,后期有新进展再更新。

相关文章
相关标签/搜索