k8s技术预研4--以二进制方式安装Kubernetes集群

本文讲解使用二进制文件方式安装k8s集群的方法。部署的是Kubernetes v1.8.8。
先从k8s官网找到对应的版本号,单击CHANGELOG,找到安装包的下载链接。或者直接点击下面的链接进去。
从页面表格中找到Server Binaries中的kubernetes-server-linux-amd64.tar.gz文件,下载到本地。
该压缩包中包括了k8s需要运行的全部服务程序文件,解压后如下所示:
-rwxr-xr-x. 1 root root  55191532 Feb 10 05:59 apiextensions-apiserver
-rwxr-xr-x. 1 root root 109306478 Feb 10 05:59 cloud-controller-manager
-rw-r--r--. 1 root root         7 Feb 10 05:59 cloud-controller-manager.docker_tag
-rw-r--r--. 1 root root 110683136 Feb 10 05:59 cloud-controller-manager.tar
-rwxr-xr-x. 1 root root 236888000 Feb 10 05:59 hyperkube
-rwxr-xr-x. 1 root root 136737665 Feb 10 05:59 kubeadm
-rwxr-xr-x. 1 root root  54030144 Feb 10 05:59 kube-aggregator
-rw-r--r--. 1 root root         7 Feb 10 05:59 kube-aggregator.docker_tag
-rw-r--r--. 1 root root  55406592 Feb 10 05:59 kube-aggregator.tar
-rwxr-xr-x. 1 root root 193579897 Feb 10 05:59 kube-apiserver
-rw-r--r--. 1 root root         7 Feb 10 05:59 kube-apiserver.docker_tag
-rw-r--r--. 1 root root 194956288 Feb 10 05:59 kube-apiserver.tar
-rwxr-xr-x. 1 root root 128451223 Feb 10 05:59 kube-controller-manager
-rw-r--r--. 1 root root         7 Feb 10 05:59 kube-controller-manager.docker_tag
-rw-r--r--. 1 root root 129827840 Feb 10 05:59 kube-controller-manager.tar
-rwxr-xr-x. 1 root root  52492214 Feb 10 06:00 kubectl
-rwxr-xr-x. 1 root root  56091648 Feb 10 06:00 kubefed
-rwxr-xr-x. 1 root root 138082408 Feb 10 05:59 kubelet
-rwxr-xr-x. 1 root root  48092971 Feb 10 05:59 kube-proxy
-rw-r--r--. 1 root root         7 Feb 10 05:59 kube-proxy.docker_tag
-rw-r--r--. 1 root root  95204864 Feb 10 05:59 kube-proxy.tar
-rwxr-xr-x. 1 root root  53985504 Feb 10 05:59 kube-scheduler
-rw-r--r--. 1 root root         7 Feb 10 05:59 kube-scheduler.docker_tag
-rw-r--r--. 1 root root  55362048 Feb 10 05:59 kube-scheduler.tar

从上图中一些文件的执行权限上可以看出,这些文件都是可执行的二进制文件。而k8s的服务都可以通过直接运行二进制文件加上启动参数的方式完成。

  • 其中在Master节点上需要部署etcd、kube-apiserver、kube-controller-manager、kube-scheduler服务进程;
  • 在工作节点上需要部署docker、kubelet和kube-proxy进程。
将正确的k8s服务二进制文件复制到/usr/bin目录下,就算是完成了软件的安装!接下来就是一些必要的参数配置了。

本次部署使用两个节点:
  • Master节点,10.0.2.5
  • Node节点,10.0.2.6

一、使用二进制方式部署k8s的Master节点

1、etcd服务

https://github.com/coreos/etcd/releases下载etcd二进制文件,将etcd和etcdctl文件复制到/usr/bin目录。
配置systemd服务文件:/usr/lib/systemd/system/etcd.service
[root@bogon system]# more etcd.service
[Unit]
Description=Etcd Server
After=network.target
[Service]
Type=simple
EnvironmentFile=-/etc/etcd/etcd.conf
WorkingDirectory=/var/lib/etcd/
ExecStart=/usr/bin/etcd
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动etcd服务:
[root@bogon system]# systemctl daemon-reload
[root@bogon system]# systemctl enable etcd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
 [root@bogon system]# mkdir -p /var/lib/etcd/
[root@bogon system]# systemctl start etcd.service

[root@bogon system]# ss -an|grep 2379
tcp    LISTEN     0      128    127.0.0.1:2379                  *:*                  
tcp    ESTAB      0      0      127.0.0.1:35242              127.0.0.1:2379               
tcp    ESTAB      0      0      127.0.0.1:2379               127.0.0.1:35242
检查etcd是否正确启动:
[root@bogon system]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379
cluster is healthy

2、kube-apiserver服务

将解压后kube-apiserver、kube-controller-manager、kube-scheduler以及管理要使用的kubectl二进制命令文件放到/usr/bin目录,即完成这几个服务的安装。

接下来对api服务进行必要的配置。
配置systemd服务文件:/usr/lib/systemd/system/kube-apiserver.service
[root@bogon system]# more kube-apiserver.service
[Unit]
Description=Kubernetes API Server
After=etcd.service
Wants=etcd.service
[Service]
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
Type=notify
[Install]
WantedBy=multi-user.target
配置文件:
[root@bogon bin]# mkdir -p /etc/kubernetes
[root@bogon kubernetes]# more /etc/kubernetes/apiserver
KUBE_API_ARGS="--storage-backend=etcd3 --etcd-servers=http://127.0.0.1:2379  --insecure-bind-address=0.0.0.0  --insecure-port=8080 --service-cluster-ip-range=10.10.10.0/24 --servic
e-node-port-range=1-65535 --admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,DefaultStorageClass,ResourceQuota --logtostderr=true
--log-dir=/var/log/kubernetes --v=2"

3、kube-controller-manager服务

kube-controller-manager服务依赖于kube-apiserver服务:
配置systemd服务文件:/usr/lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=-/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
配置文件:
[root@bogon kubernetes]# more controller-manager
KUBE_CONTROLLER_MANAGER_ARGS="--master=http://10.0.2.5:8080 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"

4、kube-scheduler服务

kube-scheduler服务也依赖于kube-apiserver服务。
配置systemd服务文件:/usr/lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=-/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
配置文件:
[root@bogon kubernetes]# cat /etc/kubernetes/scheduler
KUBE_SCHEDULER_ARGS="--master=http://10.0.2.5:8080 --logtostderr=true --log-dir=/var/log/kubernetes --v=2"

5、完成以上配置后,按顺序启动这些服务

systemctl daemon-reload
systemctl enable kube-apiserver.service
systemctl start kube-apiserver.service
systemctl enable kube-controller-manager.service
systemctl start kube-controller-manager.service
systemctl enable kube-scheduler.service
systemctl start kube-scheduler.service

检查每个服务的健康状态:
systemctl status kube-apiserver.service
systemctl status kube-controller-manager.service
systemctl status kube-scheduler.service

如果有服务出现异常,可执行journalctl -xe -u kube-scheduler查看一个指定的服务的事件信息日志。

二、使用二进制方式部署k8s的Node节点

在Node节点上,以同样的方式把从压缩包中解压出的二进制文件kubelet  kube-proxy放到/usr/bin目录中。

1、安装docker ce

先安装依赖工具包:
yum install -y yum-utils device-mapper-persistent-data lvm2

安装docker yum源:
安装docker引擎:
yum install docker-ce-17.12.0.ce
systemctl start docker
执行docker info查看安装结果。

2、kubelet服务

配置systemd服务文件:/usr/lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet Server
After=docker.service
Requires=docker.service

[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet $KUBELET_ARGS
Restart=on-failure
KillMode=process

[Install]
WantedBy=multi-user.target
配置文件:
[root@bogon kubernetes]# cat /etc/kubernetes/kubelet
KUBELET_ARGS="--address=10.0.2.6 --port=10250 --hostname-override=10.0.2.6 --allow-privileged=false --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --cluster-dns=10.10.10.2 --clust
er-domain=cluster.local --fail-swap-on=false --logtostderr=true --log-dir=/var/log/kubernetes --v=4"
用于kubelet连接Master Apiserver的配置文件
[root@worknode1 kubernetes]# more /etc/kubernetes/kubelet.kubeconfig
apiVersion: v1
kind: Config
clusters:
  - cluster:
      server: http://10.0.2.5:8080
    name: local
contexts:
  - context:
      cluster: local
    name: local
current-context: loca

启动kubelet服务:
mkdir -p /var/lib/kubelet
mkdir -p /etc/kubernetes

systemctl daemon-reload
systemctl enable kubelet
systemctl start kubelet
systemctl status kubelet


3、kube-proxy服务

kube-proxy服务依赖于network服务。
配置systemd服务文件:/usr/lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Kube-proxy Server
After=network.service
Requires=network.service

[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
KillMode=process

[Install]
WantedBy=multi-user.target
配置文件:
[root@bogon kubernetes]# cat /etc/kubernetes/proxy
KUBE_PROXY_ARGS="--master=http://10.0.2.5:8080 --hostname-override=10.0.2.6 --logtostderr=true --log-dir=/var/log/kubernetes --v=4"
启动kube-proxy服务:
systemctl daemon-reload
systemctl enable kube-proxy
systemctl restart kube-proxy
systemctl status kube-proxy


4、手工在Node节点上下载和标记好一个Pod根容器会使用到的容器镜像文件

docker pull cloudnil/pause-amd64:3.0
docker tag cloudnil/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0
注:如果你会科学上网,可以不做这一步。

三、对搭建完成的k8s集群进行一些验证测试

1、在Master上查看k8s各项服务状态

[root@bogon bin]# kubectl get nodes
NAME       STATUS    ROLES     AGE       VERSION
10.0.2.6   Ready     <none>    22m       v1.8.8


[root@bogon bin]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.10.10.1   <none>        443/TCP   2h


[root@bogon bin]# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   
controller-manager   Healthy   ok  


2、创建一个pod和service进行验证

(1)RC文件用于创建一个Pod:
[root@bogon ~]# more mysql-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql
spec:
   replicas: 1
   selector:
     app: mysql
   template:
     metadata:
       labels:
         app: mysql
     spec:
       containers:
       - name: mysql
         image: mysql
         ports:
         - containerPort: 3306
         env:
         - name: MYSQL_ROOT_PASSWORD
           value: "123456"

执行创建命令:
[root@bogon ~]# kubectl create -f mysql-rc.yaml
replicationcontroller "mysql" created

查看结果:
[root@bogon ~]# kubectl get rc
NAME      DESIRED   CURRENT   READY     AGE
mysql     1         1         1         1h
[root@bogon ~]# kubectl get pods
NAME           READY     STATUS    RESTARTS   AGE
mysql-tjvjl    1/1       Running   0          8m


(2)Service定义文件:
[root@bogon ~]# more mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
   - port: 3306
  selector:
    app: mysql

执行创建service的命令:
[root@bogon ~]# kubectl create -f mysql-svc.yaml
service "mysql" created


查看结果:
[root@bogon ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.10.10.1     <none>        443/TCP    3h
mysql        ClusterIP   10.10.10.200   <none>        3306/TCP   7s


(3)在Node节点上查看创建出来的容器
[root@worknode1 kubernetes]# docker ps
CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS              PORTS               NAMES
663504b99210        mysql                                      "docker-entrypoint.s…"   9 minutes ago       Up 9 minutes                            k8s_mysql_mysql-tjvjl_default_bfdab18b-199f-11e8-bd9c-080027cf1a4c_0
32a736ec4fed        gcr.io/google_containers/pause-amd64:3.0   "/pause"                 10 minutes ago      Up 10 minutes                           k8s_POD_mysql-tjvjl_default_bfdab18b-199f-11e8-bd9c-080027cf1a4c_0


参考1:《Kubernetes权威指南——从Docker到Kubernetes实践全接触》第2章。

参考2:Kubernetes(K8S)集群管理Docker容器(部署篇)

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试