• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

容器编排之Kubernetes1.6.1安装与配置

k8s 搞java代码 3年前 (2022-05-13) 19次浏览 已收录 0个评论

在经历了几年混乱的职业生涯之后,初步把未来延伸领域定位在容器云方向。区块链系列我还会继续写下去,且可能只会关注Hyperledger。

云计算是最近几年来火热的技术领域,不同于其他,他没有固定的行业领域限制,他只是基础设施。任何基建于计算机上的服务,在达到一定规模后,都可应用云计算解决方案使硬件资源高效利用,统一开发运维,提高服务可靠性,降低企业支出等等。近两年火热的大数据、人工智能等都离不开背后计算集群的支持。拥抱云计算,拥抱未来。且说到云计算,外行人都会觉得很高大上,其实我觉得更多的是拿来主义,就是将一系列开源软件按照公司的业务架构搭配起来,大部分的工作其实是熟悉开源软件,解决他们的坑,顺便反馈开源社区,促进其发展。

云计算也是有领域划分的,从物理机–>虚拟机–>容器技术的发展,孵化出了openstack、docker,kubernetes等这样的开源项目,openstack使得物理机到虚拟机的转变变的简单,而docker的出现,更是将这种简单极致化,将云计算推向容器云阶段。而如何将docker的容器在集群的规模上高效的管理,则是kubernetes出现的源动力。

废话不多说,本文主要是手动安装配置kubernetes集群,一个master节点(10.1.2.146)和两个node节点(10.1.2.147、10.1.2.148)。发文的时候,kubernetes的最新版本为1.6.1,我们就安装这个版本吧。下载地址

系统配置

<code class="language-text">Linux i-pw3kctun 4.4.0-42-generic #62-Ubuntu SMP Fri Oct 7 23:11:45 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

H/W path        Device  Class          Description
==================================================
                        system         OpenStack Nova
/0                      bus            Motherboard
/0/0                    memory         96KiB BIOS
/0/400                  processor      Intel Core Processor (Haswell)
/0/1000                 memory         1GiB System Memory
/0/1000/0               memory         1GiB DIMM RAM
/0/100                  bridge         440FX - 82441FX PMC [Natoma]
/0/100/1                bridge         82371SB PIIX3 ISA [Natoma/Triton II]
/0/100/1.1              storage        82371SB PIIX3 IDE [Natoma/Triton II]
/0/100/1.2              bus            82371SB PIIX3 USB [Natoma/Triton II]
/0/100/1.2/1    usb1    bus            UHCI Host Controller
/0/100/1.2/1/1          input          QEMU USB Tablet
/0/100/1.3              bridge         82371AB/EB/MB PIIX4 ACPI
/0/100/2                display        GD 5446
/0/100/3        eth0    network        Virtio network device
/0/100/4                communication  Virtio console
/0/100/5                storage        Virtio block device
/0/100/6                generic        Virtio memory balloon
</code>

www#gaodaima.com来源gao@daima#com搞(%代@#码网搞代码

先决条件

  1. 在node节点必须有docker,docker的安装请参考官方文档
  2. etcd 3:因为kubernetes1.6版本切换到了etcd 3,所以不要安装错了,安装文档参考官方文档
  3. flannel:此处我们采用flannel作为kubernetes的网络增强组件,现在有很多第三方开源软件支持kubernetes的集群pod互通,flannel只是其中的一种。安装文档参考官方文档

自定义安装

kubernetes官方提供了各种各样的安装方式,基于云提供商的,基于juju的,基于homebrew的,基于源码编译的,此处我们选择已经编译好的二进制文件安装。

下载地址

注:下载下来的并不是kubernetes的可执行文件,而是一系列的脚本,可以理解为kubernetes 的下载器

下载下来后,解压缩

<code class="language-powershell"><span class="n">tar</span> <span class="n">xzvf</span> <span class="n">kubernetes</span><span class="p">.</span><span class="n">tar</span><span class="p">.</span><span class="n">gz</span>
<span class="n">cd</span> <span class="n">kubernetes</span>
</code>

执行get-kube-binaries.sh下载server和client的可执行文件

<code class="language-text">$ ./cluster/get-kube-binaries.sh
Kubernetes release: v1.6.1
Server: linux/amd64  (to override, set KUBERNETES_SERVER_ARCH)
Client: linux/amd64  (autodetected)

Will download kubernetes-server-linux-amd64.tar.gz from https://storage.googleapis.com/kubernetes-release/release/v1.6.1
Will download and extract kubernetes-client-linux-amd64.tar.gz from https://storage.googleapis.com/kubernetes-release/release/v1.6.1
Is this ok? [Y]/n
y
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  1  346M    1 3598k    0     0   398k      0  0:14:52  0:00:09  0:14:43  464k

md5sum(kubernetes-server-linux-amd64.tar.gz)=c4c1e770789b5017df9f0ab0e945320a
sha1sum(kubernetes-server-linux-amd64.tar.gz)=34066d8230a276650ad65ca459ac28dd2901e1c0

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 63 29.0M   63 18.3M    0     0   367k      0  0:01:20  0:00:51  0:00:29  396k

md5sum(kubernetes-client-linux-amd64.tar.gz)=c2acf197ee6d9b56d3ee790b9aee789d
sha1sum(kubernetes-client-linux-amd64.tar.gz)=10466d24f9e11f749b2b20747b4f096c664b05f3

Extracting /root/kubernetes/client/kubernetes-client-linux-amd64.tar.gz into /root/kubernetes/platforms/linux/amd64
Add "/root/kubernetes/client/bin" to your PATH to use newly-installed binaries.
</code>

执行该shell会自动下载kube的server和client可执行文件,其中客户端文件会自动安装在kubernetes目录下的client文件夹下,只需将bin添加到PATH下就可以了。

可以不用管这里的bin,server的可执行包里也包含了客户端命令行工具

服务端可执行文件下载到了server文件夹,没有被自动展开

<code class="language-text">cd server
tar xzvf kubernetes-server-linux-amd64.tar.gz
ll kubernetes/server/bin
total 1.6G
-rwxr-x--- 1 root root 115M Apr  4 04:54 cloud-controller-manager
-rwxr-x--- 1 root root 182M Apr  4 04:54 hyperkube
-rwxr-x--- 1 root root  53M Apr  4 04:54 kube-aggregator
-rw-r----- 1 root root   33 Apr  4 04:54 kube-aggregator.docker_tag
-rw-r----- 1 root root  54M Apr  4 04:54 kube-aggregator.tar
-rwxr-x--- 1 root root 143M Apr  4 04:54 kube-apiserver
-rw-r----- 1 root root   33 Apr  4 04:54 kube-apiserver.docker_tag
-rw-r----- 1 root root 144M Apr  4 04:54 kube-apiserver.tar
-rwxr-x--- 1 root root 126M Apr  4 04:54 kube-controller-manager
-rw-r----- 1 root root   33 Apr  4 04:54 kube-controller-manager.docker_tag
-rw-r----- 1 root root 127M Apr  4 04:54 kube-controller-manager.tar
-rwxr-x--- 1 root root  62M Apr  4 04:54 kube-proxy
-rw-r----- 1 root root   33 Apr  4 04:54 kube-proxy.docker_tag
-rw-r----- 1 root root 106M Apr  4 04:54 kube-proxy.tar
-rwxr-x--- 1 root root  73M Apr  4 04:54 kube-scheduler
-rw-r----- 1 root root   33 Apr  4 04:54 kube-scheduler.docker_tag
-rw-r----- 1 root root  74M Apr  4 04:54 kube-scheduler.tar
-rwxr-x--- 1 root root  67M Apr  4 04:54 kubeadm
-rwxr-x--- 1 root root  68M Apr  4 04:54 kubectl
-rwxr-x--- 1 root root  65M Apr  4 04:54 kubefed
-rwxr-x--- 1 root root 133M Apr  4 04:54 kubelet
</code>

这里就是最新版本的kubernetes可执行文件列表。要构建kubernetes集群,需要在master节点启动kube-apiserver, kube-controller-manager, kube-scheduler,在每个节点启动kubelet和kube-proxy。这里我们不直接执行,采用systemctl管理。

注:需要根据个人服务器文件路径自由定义,不可照抄

kube-apiserver.service

<code class="language-text">[Unit]
Description=Kube-apiserver Service
After=network.target

[Service]
Type=notify
ExecStart=/root/kubernetes/server/kubernetes/server/bin/kube-apiserver 
            --admission-control=NamespaceAutoProvision,LimitRanger,SecurityContextDeny 
            --apiserver-count=1 
            --cors-allowed-origins=.* 
            --enable-garbage-collector=false 
            --etcd-servers=http://10.1.2.154:2379 
            --insecure-bind-address=0.0.0.0 
            --insecure-port=8080 
            --log-dir=/root/kubernetes/kube-apiserver 
            --logtostderr=false 
            --service-cluster-ip-range=192.168.2.0/24 
            --v=5 

Restart=always
LimitNOFILE=65536

[Install]
WantedBy=default.target
</code>

kube-controller-manager.service

<code class="language-text">[Unit]
Description=Kube-controller-manager Service
After=network.target

[Service]
Type=simple
ExecStart=/root/kubernetes/server/kubernetes/server/bin/kube-controller-manager 
          --enable-garbage-collector=false 
          --logtostderr=false 
          --log-dir=/root/kubernetes/log/kube-controller-manager 
          --pod-eviction-timeout=5m0s 
          --master=http://0.0.0.0:8080 
          --node-monitor-grace-period=40s 
          --terminated-pod-gc-threshold=12500 
          --leader-elect=true 
          --v=4 

Restart=always
LimitNOFILE=65536

[Install]
WantedBy=default.target
</code>

kube-scheduler.service

<code class="language-text">[Unit]
Description=Kube-scheduler Service
After=network.target

[Service]
Type=simple
ExecStart=/root/kubernetes/server/kubernetes/server/bin/kube-scheduler 
            --log-dir=/root/kubernetes/log/kube-scheduler 
            --logtostderr=false 
            --master=http://0.0.0.0:8080 
            --leader-elect=true 
            --v=5 

Restart=always
LimitNOFILE=65536

[Install]
WantedBy=default.target
</code>

接着执行命令:

<code class="language-text">systemctl --system daemon-reload
systemctl start kube-apiserver.service
systemctl start kube-controller-manager.service
systemctl start kube-scheduler.service
</code>

如果想随服务器自动启动,请参考systemctl相关命令

这样,master上的kubernetes组件就全部跑起来了,可以使用kubectl检查是否运行正常:

<code class="language-text">╭─root@i-pyv2wj89 in ~/kubernetes/server/kubernetes/server/bin
╰$ ./kubectl cluster-info
Kubernetes master is running at http://localhost:8080

To further debug and diagnose cluster problems, use "kubectl cluster-info dump".
</code>

接着,搭建两个Node节点,可以只将kube-proxy和kubelet拷贝到Node节点。

kubelet.service

<code class="language-text">[Unit]
Description=Kubelet Service
After=network.target

[Service]
Type=simple
ExecStart=/root/kubernetes/kubelet 
            --api-servers=http://10.1.2.154:8080 
            --hostname-override=10.1.2.147 
            --image-gc-high-threshold=80 
            --image-gc-low-threshold=50 
            --log-dir=/root/kubernetes/log/kubelet 
            --logtostderr=false 
            --pod-infra-container-image=docker.cloudin.com/google_containers/pause-amd64:3.0 
            --system-reserved cpu=2000m,memory=4G 
            --v=5 

Restart=always
LimitNOFILE=65536

[Install]
WantedBy=default.target
</code>

kube-proxy.service

<code class="language-text">[Unit]
Description=Kube-proxy Service
After=network.target

[Service]
Type=simple
ExecStart=/root/kubernetes/kube-proxy  
            --log-dir=/root/kubernetes/log/kube-proxy 
            --logtostderr=false 
            --master=http://10.1.2.154:8080 
            --v=5 

Restart=always
LimitNOFILE=65536

[Install]
WantedBy=default.target
</code>
<code class="language-text">systemctl --system daemon-reload
systemctl start kubelet.service
systemctl start kube-proxy.service
</code>

检查集群搭建情况:

<code class="language-text">i-pyv2wj89 :: ~ » ./kubernetes/client/bin/kubectl get node
NAME         STATUS    AGE       VERSION
10.1.2.147   Ready     24m       v1.6.1
10.1.2.148   Ready     1m        v1.6.1
</code>

自此,kubernetes集群就搭建起来了,供大家参考。当然,这是最简单的集群配置,用于学习够了,但是生产环境还是要自定义更多的配置项。

下一篇文章我会写kubernetes的认证与授权,敬请期待!

注:flannel其实跟kubernetes的集群是没有关联在一起的,flannel的主要作用是配置Node节点的docker IP范围,具体做法请另行查阅。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:容器编排之Kubernetes1.6.1安装与配置

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址