前期准备
RKE:Ranchar Kubernetes Engine
https://github.com/rancher/rke
由于RKE是由golang编写,所以直接下载对应系统的二进制文件即可
下载地址: https://github.com/rancher/rk...
1.建议使用Ubuntu 16.04.3 LTS版本;如果使用CentOS 7,建议7.3以上版本
2.各主机的hostname主机名必须不同!
3.hosts文件设置:/etc/hosts要配置正确,一定要有127.0.0.1 localhost 这一项;hosts文件中包含所有主机节点的IP和名称列表。
Docker
通过Rancher提供的脚本进行安装(以下是最新支持的docker版本)
Docker版本 | 安装脚本 |
---|---|
18.09.2 | curl https://releases.rancher.com/... | sh |
18.06.2 | curl https://releases.rancher.com/... | sh |
17.03.2 | curl https://releases.rancher.com/... | sh |
设置docker用户组
RKE通过SSH tunnel进行安装部署,需要事先建立RKE到各节点的SSH免密登录。如果集群中有3个节点,需要在RKE机器上执行1遍秘钥生成命令ssh-keygen,并将生成侧公钥通过分发命令:ssh-copy-id {user}@{ip}。
在各个节点上创建ssh用户,并将其添加至docker组中:
useradd dockeruser
usermod -aG docker dockeruser
注意:重启系统以后才能生效,只重启Docker服务是不行的!重启后,docker_user用户也可以直接使用docker run命令。
关闭Selinux
Ubuntu 16.04默认未安装,无需设置。
1)CentOS7下可修改配置文件
vi /etc/sysconfig/selinux
2)设置 SELINUX=disabled,重启后永久关闭。
设置IPV4转发
必须开启!Ubuntu 16.04下默认已启用,无需设置。
1)CentOS7 下可编辑配置文件:
vi /etc/sysctl.conf
2)设置:
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
3)执行如下命令生效:
sudo sysctl -p
设置防火墙策略
开放集群主机节点之间6443、2379、2380端口,如果是刚开始试用,可以先关闭防火墙;
systemctl stop firewalld
Ubuntu默认未启用UFW防火墙,无需设置。也可手工关闭:sudo ufw disable
禁用Swap
一定要禁用swap,否则kubelet组件无法运行。
1)永久禁用swap
可以直接修改
vi /etc/fstab
文件,注释掉swap项。
2)临时禁用
swapoff -a
启用cgroup
修改配置文件/etc/default/grub,启用cgroup内存限额功能,配置两个参数:
GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
注意:要执行sudo update-grub 更新grub,然后重启系统后生效。
CentOS下执行:
grub2-mkconfig -o /boot/grub2/grub.cfg
设置SSH
1)在rke所在主机上创建密钥:
ssh-keygen
2)将所生成的密钥的公钥分发到各个节点:
ssh-copy-id dockeruser@xxx.xxx.xx.xx
...
编写 cluster.yml
可以输入命令rke_drawin-amd64 config(我本机是mac,所以使用drawin-amd64版本),跟着引导完成基础配置
配置完成后将会在当前目录下出现一个 cluster.yml
下面是该配置文件的内容(这里我配置的是包含两个节点的k8s集群,其中一个master,rke很容易支持HA部署,仅仅需要在配置文件中对多个节点指定role.controlplane即可)
nodes:
- address: xxx.xxx.xxx.xxx
port: "22"
internal_address: ""
role:
- controlplane
- worker
- etcd
hostname_override: master
user: dockeruser
docker_socket: /var/run/docker.sock
labels: {}
- address: xxx.xxx.xxx.xxx
port: "22"
internal_address: ""
role:
- worker
hostname_override: node-1
user: dockeruser
docker_socket: /var/run/docker.sock
ssh_key: ""
ssh_key_path: ""
ssh_cert: ""
ssh_cert_path: ""
labels: {}
services:
etcd:
image: ""
extra_args: {}
extra_binds: []
extra_env: []
external_urls: []
ca_cert: ""
cert: ""
key: ""
path: ""
snapshot: null
retention: ""
creation: ""
backup_config: null
kube-api:
image: ""
extra_args: {}
extra_binds: []
extra_env: []
service_cluster_ip_range: 10.43.0.0/16
service_node_port_range: ""
pod_security_policy: false
always_pull_images: false
kube-controller:
image: ""
extra_args: {}
extra_binds: []
extra_env: []
cluster_cidr: 10.42.0.0/16
service_cluster_ip_range: 10.43.0.0/16
scheduler:
image: ""
extra_args: {}
extra_binds: []
extra_env: []
kubelet:
image: ""
extra_args: {}
extra_binds: []
extra_env: []
cluster_domain: cluster.local
infra_container_image: ""
cluster_dns_server: 10.43.0.10
fail_swap_on: false
kubeproxy:
image: ""
extra_args: {}
extra_binds: []
extra_env: []
network:
plugin: flannel
options: {}
authentication:
strategy: x509
sans: []
webhook: null
addons: ""
addons_include: []
system_images:
etcd: rancher/coreos-etcd:v3.3.10-rancher1
alpine: rancher/rke-tools:v0.1.42
nginx_proxy: rancher/rke-tools:v0.1.42
cert_downloader: rancher/rke-tools:v0.1.42
kubernetes_services_sidecar: rancher/rke-tools:v0.1.42
kubedns: rancher/k8s-dns-kube-dns:1.15.0
dnsmasq: rancher/k8s-dns-dnsmasq-nanny:1.15.0
kubedns_sidecar: rancher/k8s-dns-sidecar:1.15.0
kubedns_autoscaler: rancher/cluster-proportional-autoscaler:1.3.0
coredns: rancher/coredns-coredns:1.3.1
coredns_autoscaler: rancher/cluster-proportional-autoscaler:1.3.0
kubernetes: rancher/hyperkube:v1.14.6-rancher1
flannel: rancher/coreos-flannel:v0.10.0-rancher1
flannel_cni: rancher/flannel-cni:v0.3.0-rancher1
calico_node: rancher/calico-node:v3.4.0
calico_cni: rancher/calico-cni:v3.4.0
calico_controllers: ""
calico_ctl: rancher/calico-ctl:v2.0.0
canal_node: rancher/calico-node:v3.4.0
canal_cni: rancher/calico-cni:v3.4.0
canal_flannel: rancher/coreos-flannel:v0.10.0
weave_node: weaveworks/weave-kube:2.5.0
weave_cni: weaveworks/weave-npc:2.5.0
pod_infra_container: rancher/pause:3.1
ingress: rancher/nginx-ingress-controller:0.21.0-rancher3
ingress_backend: rancher/nginx-ingress-controller-defaultbackend:1.5-rancher1
metrics_server: rancher/metrics-server:v0.3.1
ssh_key_path: ~/.ssh/id_rsa
ssh_cert_path: ""
ssh_agent_auth: true
authorization:
mode: rbac
options: {}
ignore_docker_version: false
kubernetes_version: ""
private_registries: []
ingress:
provider: ""
options: {}
node_selector: {}
extra_args: {}
cluster_name: ""
cloud_provider:
name: ""
prefix_path: ""
addon_job_timeout: 0
bastion_host:
address: ""
port: ""
user: ""
ssh_key: ""
ssh_key_path: ""
ssh_cert: ""
ssh_cert_path: ""
monitoring:
provider: ""
options: {}
restore:
restore: false
snapshot_name: ""
dns: null
安装Kubernetes
rke_drawin-amd64 up
可以看到脚本开始输入一些日志信息
最终出现
Finished building Kubernetes cluster successfully
则表示集群安装成功。
验证
集群安装成功后,RKE会在当前目录创建一个kube_config_cluster.yml文件,这个文件就是kubeconfig文件
默认情况下,kube配置文件被称为.kube_config_cluster.yml。将这个文件复制到你的本地~/.kube/config,就可以在本地使用kubectl了。
需要注意的是,部署的本地kube配置名称是和集群配置文件相关的。例如,如果您使用名为mycluster.yml的配置文件,则本地kube配置将被命名为.kube_config_mycluster.yml。
export KUBECONFIG=./kube_config_cluster.yml
kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready controlplane,etcd,worker 6m27s v1.14.6
node-1 Ready worker 6m5s v1.14.6
看到节点信息表明安装成功
添加或删除节点
RKE支持为角色为worker和controlplane的主机添加或删除节点。
1)添加节点:
要添加其他节点,只需要更新具有其他节点的集群配置文件,并使用相同的文件运行集群配置即可。
2)删除节点:
要删除节点,只需从集群配置文件中的节点列表中删除它们,然后重新运行rke up命令。
高可用
RKE工具是满足高可用的。您可以在集群配置文件中指定多个控制面板主机,RKE将在其上部署主控组件。
默认情况下,kubelets被配置为连接到nginx-proxy服务的地址——127.0.0.1:6443,该代理会向所有主节点发送请求。
要启动HA集群,只需使用controlplane角色指定多个主机,然后正常启动集群即可。
删除集群
RKE支持rke remove命令。该命令执行以下操作:
连接到每个主机并删除部署在其上的Kubernetes服务。
从服务所在的目录中清除每个主机:
- /etc/kubernetes/ssl
- /var/lib/etcd
- /etc/cni
- /opt/cni
请注意,这个命令是不可逆的,它将彻底摧毁Kubernetes集群。
安装中可能遇到的问题
ssh: handshake failed: ssh: unable to authenticate, attempted methods [publickey none], no supported methods remain
请检查配置文件中配置的用户是否可以使用指定的私钥登录机器
有疑问加站长微信联系(非本文作者)