用rancher-rke部署kubernetes集群。

正文

准备机器

我用的是四台CentOS,内网互联。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Server Version: 17.03.2-ce
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-514.26.2.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 32
Total Memory: 125.6 GiB
Name: s07.c1
ID: UADY:ZUNA:J55Q:JOXR:CHIG:C3KT:RBM3:KQGU:VXN7:FBSA:KVYE:LNI5
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false

配置目标机器

  • 通过ansible user模块,创建新用户,并加入docker user group。
  • 给用户目录下.ssh加入authorized_keys。
  • 使用rancher给的docker安装脚本,安装17.03版本的docker(这里自己装或者yum装都可以,脚本其实也是通过yum安装)

开始部署

  • 在一台部署机下载rke binary,通过rke config创建一个cluster.yml。
  • 此时遇到的问题是ssh连接失败,有以下几个原因:
    • key不对,这部分重新检查就行。
    • centos不能用root用户,因为我创建了新用户,所以也不是这个问题。
    • sshd的版本要在7.4以上,此时我发现有两台目标机器ssh为6.3,所以需要升级ssh。

sshd升级

  • 为了避免操作失败,导致机器失联,所以先安装telnet,启动telnet服务。

  • 安装telnet可以通过ansible yum,具体包名为telnet-server和xinetd。

  • 下载ssh的tarball

    1
    2
    ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers
    make && make install
  • 这里有一个问题,先将/etc/ssh mv到其他名字,然后install,才能变成全新版本。而且也有可能需要通过rpm删除之前的版本。

    1
    2
    3
    rpm -e openssh --nodeps
    rpm -e openssh-clients --nodeps
    rpm -e openssh-server --nodeps
  • 接着,有可能之前没有用systemctl管理,所以这时候需要将

    1
    2
    cp -p contrib/redhat/sshd.init /etc/init.d/sshd
    chmod +x /etc/init.d/sshd
  • 修改配置文件,允许root登录,不改的话只是不能用密码登录,默认是允许密钥登录。

    1
    2
    3
    [root@Centos6 openssh-7.6p1]# sed -i '/^#PermitRootLogin/s/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
    [root@Centos6 openssh-7.6p1]# cat /etc/ssh/sshd_config|grep RootLogin
    PermitRootLogin yes
  • 最后重启sshd。

    1
    service sshd restart

重新部署

  • 修改了部署文件,重新开始的时候,可以先删除一下tmp,虽然并不是总需要。

    1
    rm -rf /etc/kubernetes/.tmp/
  • 有时候还可以重启一下docker。

    1
    systemctl restart docker
  • 最后在health check卡住,暂未解决。

    1
    FATA[0115] [controlPlane] Failed to bring up Control Plane: Failed to verify healthcheck: Service [kube-apiserver] is not healthy on host [192.168.2.16]. Response code: [401], response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"Unauthorized","reason":"Unauthorized","code":401}
  • rke remove。清除掉之前的key和残留,重新开始。 issue#847

成功部署

  • 总的来说,胆大心细,看一点点博客介绍,然后关注issue。