搭建kubernetes集群详细步骤(包含所有镜像资源下载)
搭建kubernetes集群--(包含dashboard),看完可以部署任何版本的kubernetes环境准备工作:1、搭建k8s集群之前首先准备好≥3台的机器(本示例用的是阿里云主机)2、并做好免密登陆,搭建时各种操作会便捷很多制作秘钥:ssh-keygen -t rsa分发:ssh-copy-id -i ~/.ssh/id_rsa.pub 172.19.90.87<各...
搭建kubernetes集群--(包含dashboard),看完可以部署任何版本的kubernetes
环境准备工作:
1、搭建k8s集群之前首先准备好≥3台的机器(本示例用的是阿里云主机)
2、并做好免密登陆,搭建时各种操作会便捷很多
制作秘钥:ssh-keygen -t rsa
分发:ssh-copy-id -i ~/.ssh/id_rsa.pub 172.19.90.87<
各个node节点IP都传一遍>
3、设置好主机名和时间同步,虚拟机可能问题出现比较多,阿里云一般都默认同步
[root@k8s-master01 ~]# for i in k8s-node01 k8s-node02 k8s-node03;do echo $i && date;done && hostname && date
k8s-node01
Mon Dec 24 13:42:57 CST 2018
k8s-node02
Mon Dec 24 13:42:57 CST 2018
k8s-node03
Mon Dec 24 13:42:57 CST 2018
k8s-master01
Mon Dec 24 13:42:57 CST 2018
4、设置主机名,规划一下主机名,有集群的概念思想
命令:
[root@k8s-master01 ~]# hostnamectl set-hostname k8s-master01
172.19.96.11 k8s-master01---------->hostnamectl set-hostname k8s-master01
172.19.90.87 k8s-node01 ---------->hostnamectl set-hostname k8s-node01
172.19.90.88 k8s-node02---------->hostnamectl set-hostname k8s-node02
172.19.90.89 k8s-node03---------->hostnamectl set-hostname k8s-node03
5、修改master和各个node的hosts文件:vim /ets/hosts 用于地址解析
添加如下内容
[root@k8s-master01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
##集群##
172.19.96.11 k8s-master01
172.19.90.87 k8s-node01
172.19.90.88 k8s-node02
172.19.90.89 k8s-node03
部署基础组件前的准备工作
Master和node节点全部都要安装的程序如下,每个服务器上都执行一次
安装之前配置一下yum仓库,因为默认的仓库源版本可能陈旧或者没有yum源,所以我们用阿里云的镜像站资源配置一下yum-repo
[root@k8s-master01 ~]# cd /etc/yum.repos.d/
Docker-ce的直接阿里云官方找到了 现成的直接下载下来
[root@k8s-master01 ]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
kubernetes的repo没找到链接,内容直接贴出来如下:
[root@k8s-master01 ]# vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
保存退出
[root@k8s-master01 ]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
[root@k8s-master01 ]# rpm --import yum-key.gpg
[root@k8s-master01 ]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
[root@k8s-master01 ]# rpm --import rpm-package-key.gpg
把yum源配置到各个node节点上,或者刚才的步骤挨个在主机上执行一遍也行
[root@k8s-master01 ]# scp kubernetes.repo docker-ce.repo k8s-node01:/etc/yum.repos.d/
[root@k8s-master01 ]# scp kubernetes.repo docker-ce.repo k8s-node02:/etc/yum.repos.d/
[root@k8s-master01 ]# scp kubernetes.repo docker-ce.repo k8s-node03:/etc/yum.repos.d/
在各node节点都需要执行:
[root@k8s-node01 ]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
[root@k8s-node01 ]# rpm --import yum-key.gpg
[root@k8s-node01 ]# wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
[root@k8s-node01 ]# rpm --import rpm-package-key.gpg
开始安装各个组件
Master和node各节点都需要执行
[root@k8s-master01 ]# yum install -y docker-ce kubelet kubeadm kubectl (在master上执行)
[root@k8s-node01 ]# yum install -y docker-ce kubelet kubeadm kubectl(每个node上都要执行)
Master和各node节点都需要关闭防火墙,防火墙相关操作
[root@k8s-master01 ~]# systemctl stop firewalld.service
[root@k8s-master01 ~]# systemctl disable difewalld.service
Master和各node节点都需要开启docker
[root@k8s-master01 ]# systemctl daemon-reload
[root@k8s-master01 ]# systemctl start docker
Master和各node节点都需要设置docker-ce的开机自启动
systemctl enable docker kubelet
验证一下iptables和ip6tables
[root@k8s-master01 ~]# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
1
[root@k8s-master01 ~]# cat /proc/sys/net/bridge/bridge-nf-call-iptables
1
这里如果cat的内容不是1的话则修改路径下的文件,内容改成1然后保存
修改kubelet配置文件,不知道kubelet配置文件在哪儿用命令查看一下kubelet的文件位置:
[root@k8s-master01 ~]# rpm -ql kubelet
/etc/kubernetes/manifests
/etc/sysconfig/kubelet
/etc/systemd/system/kubelet.service
/usr/bin/kubelet
[root@k8s-master01 ~]# cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
[root@k8s-master01 ~]# cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
[root@k8s-master01 ~]# rpm -ql kubeadm
/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
/usr/bin/kubeadm
写一个下载镜像的脚本,因为直接去国外的地址下载会被墙
===========================================================
#!/bin/bash
images=(kube-apiserver:v1.12.0 kube-controller-manager:v1.12.0 kube-scheduler:v1.12.0 kube-proxy:v1.12.0 pause:3.1 etcd:3.2.24 coredns:1.2.2 kubernetes-dashboard-amd64:v1.10.0 tiller:v2.6.1 addon-resizer:1.8.4 flannel:v0.10.0-amd64 grafana:5.3.4 heapster-influxdb-amd64:v1.5.2 metrics-server-amd64:v0.3.1 )
for ima in ${images[@]}
do
docker pull registry.cn-shanghai.aliyuncs.com/wangting/$ima
docker tag registry.cn-shanghai.aliyuncs.com/wangting/$ima k8s.gcr.io/$ima
docker rmi -f registry.cn-shanghai.aliyuncs.com/wangting/$ima
docker tag 0ebffe5ba8a7 gcr.io/kubernetes-helm/tiller:v2.6.1
docker tag f0fad859c909 quay.io/coreos/flannel:v0.10.0-amd64
done
===========================================================
脚本执行完毕,docker images查看一下,一下全部拉下来,非常的效率方便
[root@k8s-master01 ~]# bash -x kubernetes.sh
注意:这个镜像站是本人私人的,我不可能像官方那样出一个版本就更新一个版本到我的私人仓库,没这么多精力,目前仓库里有大量1.12和1.16两个版本的镜像,1.12用文档里的脚本,1.16就改一下images里的清单。其它版本则需要去找镜像资源。
Master和各node节点都需要执行一下脚本,一次把所需的镜像全部下载到位并打好标签
Master上执行kubeadm init命令;
[root@k8s-master01 ~]# kubeadm init --kubernetes-version=v1.12.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
注意这里有多个坑,我安装的是kubernetes-version=v1.12.0,随着时间的过去,以后版本慢慢变成1.13,1.14等等等,这样yum install 安装的kubelet版本就未必是1.12的了,所以组件我上面推荐用阿里云的镜像repo,这样一般不会出现版本太老的,并且这条命令时间长了安装的时候版本需要注意变更,--kubernetes-version=v版本号,比如你要安装1.13.1,这样对应的镜像就需要用新的,这也是我一直反复说的镜像问题。
例如:
kubeadm init --kubernetes-version=v1.13.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
随着--kubernetes-version版本涉及变化的镜像有:(xxxx代表你安装时体统提示你需要的镜像版本,根据提示替换成xxxx)
k8s.gcr.io/coredns:xxxx
k8s.gcr.io/kube-scheduler:xxxx
k8s.gcr.io/kube-apiserver:xxxx
k8s.gcr.io/kube-controller-manager:xxxx
k8s.gcr.io/kube-proxy:xxxx
需要下载最新的镜像:
docker pull gcr.io/google-containers/kube-apiserver:v1.15.2 这样拉取国内一般是肯定拉取不到的
对应的方式可以换成如下的方法拉取,拉到本地再tag一下
docker pull gcr.azk8s.cn/google-containers/kube-apiserver:v1.15.2
docker images 查看imageID
docker tag imageID k8s.gcr.io/kube-proxy:xxxx
docker tag imageID k8s.gcr.io/kube-controller-manager:xxxx
docker tag imageID k8s.gcr.io/kube-apiserver:xxxx
docker tag imageID k8s.gcr.io/kube-scheduler:xxxx
docker tag imageID k8s.gcr.io/coredns:xxxx
这样镜像处理好了再执行init才会OK
还有一个坑就是有些人搭建的时候用的是虚拟机搭建可能出现:
[ERROR Swap]: running with swap on is not supported. Please disable swap
如果出现这样的报错处理方式为:
[root@master ~]# swapoff -a
然后执行init,基本都能解决上面的报错,如果还是不行则
[root@master ~]# vim /etc/fstab
把类似下面这行内容注释保存,再执行init
init执行成功后
(此命令执行成功后,在输出的内容里能会看到join的命令,复制一下备着有用!)
===
...
kubeadm join 172.19.96.11:6443 --token 9z9bo5.wh3bdd44rgpxbnkr --discovery-token-ca-cert-hash sha256:19a3f3804eb643ca4ffad56d272fe0da0b222f4567d16c61a9e885c1489cda32
所有节点node上执行这个kubeadm join 命令(注意这个kubeadm join里的秘钥每个人不一样,我文档命令不能复制粘贴去使用,命令来自于自己刚才执行kubeadm init出来的)
接下来一步简单但是容易被忽略:
将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到从节点相同目录下,然后配置环境变量:
把/etc/kubernetes/admin.conf分发到各个节点
1、
2、
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
3、立即生效
source ~/.bash_profile
基本框架搭建完成,开始搭建网络组建
此时整个k8s集群还缺少一个网络配置flannel
master上直接执行:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
可以完成k8s集群的网络flannel配置,地址是GitHub官网上的yml,一般地址不会变,如果404了,可以把URL打开主页一步步去找到yml的路径再apply -f
至此k8s集群基本搭建完成了,检查一下:
[root@master ~]# kubectl get pod --all-namespaces
kubernetes搭建完毕,最后开启dashboard 页面访问,实现图形化
Master上执行
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
这里搭建dashboard有2个坑,一个是注意上面的地址官方可能会变,如果命令提示404等问题
打开https://github.com/kubernetes/dashboard/,在下图中的位置找到最新的连接复制执行
还一个坑依然还是镜像拉取的问题
跑起来了以后,做个配置修改如下:这个是用于集群外部访问,官网的配置文件默认的svc访问是ClusterIP
[root@k8s-master01 ~]# kubectl edit service kubernetes-dashboard --namespace=kube-system
此命令修改页面访问的type形式,改成type: NodePort
如果你会编写yaml文件,也可以把在线的yaml wget下来,编辑svc的type再apply -f
[root@k8s-master01 ~]# kubectl describe secret/$(kubectl get secret -nkube-system |grep admin|awk '{print $1}') -nkube-system
此命令获取dashboard的token,token用来后面页面访问使用
如果命令查不到
[root@master grafana]# kubectl get secret --all-namespaces|grep dashboard
kubernetes-dashboard default-token-2qtqd kubernetes.io/service-account-token 3 2d18h
kubernetes-dashboard kubernetes-dashboard-certs Opaque 0 2d18h
kubernetes-dashboard kubernetes-dashboard-csrf Opaque 1 2d18h
kubernetes-dashboard kubernetes-dashboard-key-holder Opaque 2 2d18h
kubernetes-dashboard kubernetes-dashboard-token-5mpfp kubernetes.io/service-account-token 3 2d18h
找到dashboard的token secret 然后用describe查看
最后验证所有system的pod是否都成功跑了起来,如果还有部分没起来describe检查一下对应的pod看看什么问题
[root@k8s-master01 ~]# kubectl get svc -n kube-system
查看kubernetes-dashboard对外的端口是多少,此端口为外网访问的端口
https://47.101.205.45:32204 格式为:<https://对外的IP地址:get svc查到的端口>
效果如下图:
Dashoard部署完毕。
Helm包管理
Helm
核心术语
Chart 是一个helm程序包 可理解成类似yum的RPM包
Reponsitory Charts仓库 可理解成类似yum的repo源 https、http服务
Release 特定的Chart部署于目标集群上的一个实例 可理解成类似yum安装的一个程序版本V
流程大致为 Chart--> Config --> Release
程序架构
helm(客户端)--管理本地的Charts,有点像linux的yum命令,与Tiller服务器交互,发送Chart给Tiller,
用以实例安装、查询、卸载等操作,同理于yum install、yum search、yum remove
Tiller(服务端)--接收helm发来的Charts与Config,合并生成release,最终成功部署
在https://github.com/helm/helm/releases/tag/v2.15.2 版本页面上可以看到不同的系统环境下载的资源包:
Installation and Upgrading
Download Helm 2.15.2. The common platform binaries are here:
MacOS amd64 (checksum)
Linux amd64 (checksum)
Linux arm (checksum)
Linux arm64 (checksum)
Linux i386 (checksum)
Linux ppc64le (checksum)
Linux s390x (checksum)
Windows amd64 (checksum)
找到Linux amd64 (checksum),右键复制链接地址
[root@master ~]# mkdir helm
[root@master ~]# cd helm
[root@master helm]# wget https://get.helm.sh/helm-v2.15.2-linux-amd64.tar.gz
[root@master helm]# tar xf helm-v2.15.2-linux-amd64.tar.gz
[root@master helm]# ls
helm-v2.15.2-linux-amd64.tar.gz linux-amd64
[root@master helm]# cd linux-amd64/
[root@master linux-amd64]# ls
helm LICENSE README.md tiller
[root@master linux-amd64]# mv helm /usr/bin/
[root@master linux-amd64]# helm --help
...#查看帮助,大致先了解一下功能
部署一个tiller-rbac
[root@master linux-amd64]# vim tiller-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
[root@master linux-amd64]# kubectl apply -f tiller-rbac.yaml
serviceaccount/tiller created
clusterrolebinding.rbac.authorization.k8s.io/tiller created
[root@master linux-amd64]# kubectl get sa -n kube-system |grep tiller
tiller 1 41s
[root@master linux-amd64]#
[root@master linux-amd64]# docker pull gcr.azk8s.cn/kubernetes-helm/tiller:v2.15.2
[root@master linux-amd64]# docker tag gcr.azk8s.cn/kubernetes-helm/tiller:v2.15.2 gcr.io/kubernetes-helm/tiller:v2.15.2
[root@master linux-amd64]#
[root@master linux-amd64]#
[root@master linux-amd64]# helm init --service-account tiller
Creating /root/.helm
Creating /root/.helm/repository
Creating /root/.helm/repository/cache
Creating /root/.helm/repository/local
Creating /root/.helm/plugins
Creating /root/.helm/starters
Creating /root/.helm/cache/archive
Creating /root/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /root/.helm.
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
[root@master linux-amd64]# kubectl get pods -n kube-system |grep tiller
tiller-deploy-684c9f98f5-n6vwc 1/1 Running 0 8m
helm部署完毕
使用介绍
[root@master linux-amd64]# helm version # 查看版本信息
Client: &version.Version{SemVer:"v2.15.2", GitCommit:"8dce272473e5f2a7bf58ce79bb5c3691db54c96b", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.15.2", GitCommit:"8dce272473e5f2a7bf58ce79bb5c3691db54c96b", GitTreeState:"clean"}
[root@master linux-amd64]# helm repo update # 更新仓库信息
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
Update Complete.
ps: helm的官网地址
URL: https://helm.sh/
官网helm的 仓库地址:https://hub.helm.sh/
可以在里面找一些可用的Charts列表,请自行打开浏览,资源都是拿来即用的。
在Search Charts里查找你所需要部署的服务
也可以命令行操作,(最好打开官网浏览一下再命令行操作一下,对比印象深)
[root@master linux-amd64]# helm search redis
NAME CHART VERSION APP VERSION DESCRIPTION
stable/prometheus-redis-exporter 3.1.0 1.0.4 Prometheus exporter for Redis metrics
stable/redis 9.5.0 5.0.5 Open source, advanced key-value store. It is often referr...
stable/redis-ha 3.9.3 5.0.5 Highly available Kubernetes implementation of Redis
stable/sensu 0.2.3 0.28 Sensu monitoring framework backed by the Redis transport
[root@master linux-amd64]# helm inspect stable/redis
...可以查看部署帮助
具体想了解详细使用方法,最好去找个helm教程学习了解一下。
更多推荐
所有评论(0)