社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
关于Kubernetes的介绍网上非常非常的多,这里就不多介绍了,如果有兴趣了解,看官网点击打开链接,值得静下心来好好学习下。
工具 | 用途 |
Oracle VirtualBox | 用于安装ubuntu,单台虚拟机 |
Ubuntu | 版本是16.04 LTS |
可以到官方的下载地址下载,地址是:点击打开链接,最新下载版本是V1.10,会被墙,可以参考点击打开链接,无论如何我还是把V1.0的client binary、server binary、node binary下载下来了。ETCD可以到点击打开链接下载。
软件包 | 用途 |
kubernetes-server-linux-amd64.tar.gz | 版本是V1.10,包含KUBE-APISERVER,KUBE-CONTROLLER-MANAGER,KUBE-SCHEDULE 下载地址: https://pan.baidu.com/s/13wm4-ekgWv2BWsCRnY38oQ |
kubernetes-node-linux-amd64.tar.gz | 版本是V1.10, 包含KUBELET,KUBE-PROXY,KUBECTL,需要先安装Docker 下载地址:https://pan.baidu.com/s/18PsRGxFIwqVbRIMRqZ8fgA |
etcd-v3.3.4-linux-amd64.tar.gz | 版本是V3.34,Kubernetes Master需要ETCD数据存储 下载地址:https://pan.baidu.com/s/1jy7DN7z6TUWNWGjBoN92cw |
Docker | 版本V1.12.6 |
ETCD是用于共享配置和服务发现的分布式、一致性的KV存储系统,主要包括了增删改查、安全认证、集群、选举、事务、分布式锁、Watch机制等等,实现了RAFT协议,功能相当强大,coreos出品。
解压etcd-v3.3.4-linux-amd64.tar.gz,把目录下的etcd和etcdctl复制到/usr/local/bin目下,如图
然后在/usr/lib/systemd/system/目录下创建etcd.service,如果没有system这个目录,则创建就可以,首先创建ETCD的存储的目录地址/home/chen/etcd/data,然后创建ETCD的配置文件目录/etc/etcd/,因为我们用的ETCD默认配置,所以/etc/etcd/etcd.conf空文件即可。
/usr/lib/systemd/system/etcd.service
[Unit]
Descriptio=Etcd Server
After=network.target
[Service]
Type=simple
WorkingDirectory=/home/chen/etcd/data
EnvironmentFile=- /etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd
[Install]
WantedBy=multi-user.target
然后执行命令:
sudo systemctl daemon-reload
sudo systemctl enable etcd.service
sudo systemctl start etcd.service
启动后查看日志:
sudo systemctl status etcd.service
这样ETCD的服务就起来了,可以用etcdctl命令往etcd写数据了。
export ETCDCTL_API=3
sudo ectdctl put foo "foo"
sudo ectdctl get foo
API SERVER是整个k8s集群的注册中心、交通枢纽、安全控制入口。
解压kubernetes-server-linux-amd64.tar.gz 文件,拷贝kube-apiserver到/usr/local/bin/目录下。
然后在/usr/lib/systemd/system/目录下创建kube-apiserver.service
在/etc/kubernetes/目录下创建apiserver配置文件。
kube-apiserver.service配置
[Unit]
Description=Kube API Server
After=etcd.service
Wants=etcd.service
[Service]
Type=notify
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/local/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
/etc/kubernetes/apiserverKUBE_API_ARGS="--etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --service-cluster-ip-range=170.170.0.0/16 --service-node-port-range=1-65535 --admission-control=NamespaceLifecycle,LimitRanger,ResourceQuota --logtostderr=false --log-dir=/home/chen/log/kubenetes --v=2"
API SERVER有三种认证方式:基本认证、Token认证、CA认证,很明显,这个配置没有任何认证信息,不建议在生产环境中使用,但是为了快速搭建环境,此次先跳过这个步骤,另外写博客详细描述这三种方式的搭建方式。
所有配置都弄好后,执行以下命令
sudo systemctl daemon-reload
sudo systemctl enable kube-apiserver.service
sudo systemctl start kube-apiserver.service
启动后查看日志:
sudo systemctl status kube-apiserver.service
通过curl命令访问API SERVER的数据,如下:
curl http://localhost:8080/api/
这样API SERVER就搭建完成了。
Kube Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Kube Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
kube-controller-manager的运行脚本在kubernetes-server-linux-amd64.tar.gz 文件中,拷贝kube-controller-manager到/usr/local/bin/目录下。
然后在/usr/lib/systemd/system/目录下创建kube-controller-manager.service
在/etc/kubernetes/目录下创建controller-manager配置文件。
kube-controller-manager.service 如下:
[Unit]
Description=Kube Controller Manager
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=/etc/kubernetes/controller-manager
ExecStart=/usr/local/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
controller-manager配置文件如下:
KUBE_CONTROLLER_MANAGER_ARGS="--master=http://10.0.2.15:8080 --logtostderr=false --log-dir=/home/chen/log/kubernetes --v=2"
--master=http://10.0.2.15:8080可以改成--master=http://127.0.0.1:8080,
然后执行如下命令:
sudo systemctl daemon-reload
sudo systemctl enable kube-controller-manager.service
sudo systemctl start kube-controller-manager.service
查看启动日志:
sudo systemctl status kube-controller-manager.service
可以看到Kube Controller Manager已经启动起来。
Kube Scheduler是负责调度Pod到具体的Node,它通过API Server提供的接口监听Pods,获取待调度pod,然后根据一系列的预选策略和优选策略给各个Node节点打分排序,然后将Pod调度到得分最高的Node节点上。
kube-scheduler的运行脚本在kubernetes-server-linux-amd64.tar.gz 文件中,拷贝kube-scheduler到/usr/local/bin/目录下。
然后在/usr/lib/systemd/system/目录下创建kube-scheduler.service
在/etc/kubernetes/目录下创建scheduler配置文件。
kube-scheduler.service
[Unit]
Description=Kube Scheduler
After=kube-apiserver.service
Requires=kube-apiserver.service
[Service]
EnvironmentFile=/etc/kubernetes/scheduler
ExecStart=/usr/local/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
scheduler配置文件
KUBE_SCHEDULER_ARGS="--master=http://10.0.2.15:8080 --logtostderr=false --log-dir=/home/chen/log/kubernetes --v=2"
执行以下命令:
sudo systemctl daemon-reload
sudo systemctl enable kube-scheduler.service
sudo systemctl start kube-scheduler.service
查看启动日志:
sudo systemctl status kube-scheduler.service
OK,这样kubernetes的Master节点就搭建完毕了,接下来搭建Node节点,Node节点还是在同样的虚拟机上搭建,一般要求是Master和Node在不同的服务器上,但是K8s官方网站上说master和node在同一台机器上完全是没问题滴,所以就在同一台服务器上弄就可以了。
安装node之前需要先安装docker,关于安装docker的教程可以查看官方文档,也可以查看我之前写的博客,地址是点击打开链接
解压kubernetes-node-linux-amd64.tar.gz 文件,拷贝kubelet到/usr/local/bin/目录下。
然后在/usr/lib/systemd/system/目录下创建kubelet.service
在/etc/kubernetes/目录下创建配置文件,包括kubelet和kubelet.yaml。
kubelet.service配置如下:
[Unit]
Description=Kube Kubelet Server
After=docker.service
Requires=docker.service
[Service]
ExecStart=/usr/local/bin/kubelet --kubeconfig=/etc/kubernetes/kubelet.yaml --fail-swap-on=false --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
kubelet.yaml配置如下:
apiVersion: v1
kind: Config
clusters:
- name: local
- cluster:
server: http://10.0.2.15:8080
users:
- name: kubelet
contexts:
- context:
cluster: local
user: kubelet
- name: kubelet-context
current-context: kubelet-context
配置完成后,执行以下命令:
sudo systemctl daemon-reload
sudo systemctl enable kubelet.service
sudo systemctl start kubelet.service
查看启动日志:
sudo systemctl status kubelet.service
从日志看,kubelet已经启动起来,并拉取chenpeihai/springboot-helloworld的这个镜像,以后的博客会讲这个。
解压kubernetes-node-linux-amd64.tar.gz 文件,拷贝kube-proxy到/usr/local/bin/目录下。
然后在/usr/lib/systemd/system/目录下创建kube-proxy.service
在/etc/kubernetes/目录下创建proxy配置文件。
kube-proxy.service配置如下:
[Unit]
Descriptio=Kube Kube-Proxy Server
After=network.target
Requires=network.target
[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/local/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
proxy配置文件如下:
KUBE_PROXY_ARGS="--master=http://10.0.2.15:8080 --logtostderr=false --log-dir=/home/chen/log/kubernetes --v=2"
配置完成后,执行以下命令:
sudo systemctl daemon-reload
sudo systemctl enable kube-proxy.service
sudo systemctl start kube-proxy.service
然后查看日志:
sudo systemctl status kube-proxy.service
可以看到kube-proxy已经启动,下面的错误信息并无大碍,查看github上的issue有提到该问题,但是目前还是没有去掉这个错误信息。
最后把kubectl复制到/usr/local/bin目录下。
单机的k8s就搭建完成了,下面会写springboot部署到k8s的教程。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!