RKE:Ranchar Kubernetes Engine
https://github.com/rancher/rke
因爲RKE是由golang編寫,因此直接下載對應系統的二進制文件便可
下載地址: https://github.com/rancher/rk... node
1.建議使用Ubuntu 16.04.3 LTS版本;若是使用CentOS 7,建議7.3以上版本
2.各主機的hostname主機名必須不一樣!
3.hosts文件設置:/etc/hosts要配置正確,必定要有127.0.0.1 localhost 這一項;hosts文件中包含全部主機節點的IP和名稱列表。linux
經過Rancher提供的腳本進行安裝(如下是最新支持的docker版本)nginx
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 |
RKE經過SSH tunnel進行安裝部署,須要事先創建RKE到各節點的SSH免密登陸。若是集羣中有3個節點,須要在RKE機器上執行1遍祕鑰生成命令ssh-keygen,並將生成側公鑰經過分發命令:ssh-copy-id {user}@{ip}。git
在各個節點上建立ssh用戶,並將其添加至docker組中:github
useradd dockeruser usermod -aG docker dockeruser
注意:重啓系統之後才能生效,只重啓Docker服務是不行的!重啓後,docker_user用戶也能夠直接使用docker run命令。
Ubuntu 16.04默認未安裝,無需設置。golang
1)CentOS7下可修改配置文件web
vi /etc/sysconfig/selinux
2)設置 SELINUX=disabled,重啓後永久關閉。docker
必須開啓!Ubuntu 16.04下默認已啓用,無需設置。api
1)CentOS7 下可編輯配置文件:dom
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
開放集羣主機節點之間644三、237九、2380端口,若是是剛開始試用,能夠先關閉防火牆;
systemctl stop firewalld
Ubuntu默認未啓用UFW防火牆,無需設置。也可手工關閉:sudo ufw disable
必定要禁用swap,不然kubelet組件沒法運行。
1)永久禁用swap
能夠直接修改
vi /etc/fstab
文件,註釋掉swap項。
2)臨時禁用
swapoff -a
修改配置文件/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
1)在rke所在主機上建立密鑰:
ssh-keygen
2)將所生成的密鑰的公鑰分發到各個節點:
ssh-copy-id dockeruser@xxx.xxx.xx.xx ...
能夠輸入命令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
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服務。
從服務所在的目錄中清除每一個主機:
請注意,這個命令是不可逆的,它將完全摧毀Kubernetes集羣。
ssh: handshake failed: ssh: unable to authenticate, attempted methods [publickey none], no supported methods remain
請檢查配置文件中配置的用戶是否可使用指定的私鑰登陸機器