1、操作系统
1)建议使用CentOS 7.3以上版本;
序号 | 角色 | 操作系统 | IP | 主机 |
---|---|---|---|---|
1 | RKE | CentOS7 | 10.0.32.134 | rancher-server |
2 | etcd | CentOS7 | 10.0.32.175 | rancher2-server |
3 | Master | Node | CentOS7 | 10.0.32.175 |
4 | Worker | Node | CentOS7 | 10.0.32.177 |
5 | Worker | Node | CentOS7 | 10.0.32.178 |
2)各主机的hostname主机名必须不同!
3)hosts文件设置:/etc/hosts要配置正确,一定要有127.0.0.1 localhost 这一项;hosts文件中包含所有主机节点的IP和名称列表。
2、关闭Selinux
sed -i '/^SELINUX/s/enforcing/disabled/' /etc/selinux/config
setenforce 0
3、设置IPV4转发
cat >> /etc/sysctl.conf << END
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
END
#执行如下命令生效
sysctl -p
4、设置防火墙策略
#开放集群主机节点之间6443、2379、2380端口,也可以先关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
5、禁用Swap
#永久禁用swap,可以直接修改 /etc/fstab
sed -i '/swap/s/^/#/g' /etc/fstab
mount -a
#临时禁用
swapoff -a
6、启用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,然后重启系统后生效。
7、设置SSH
RKE通过SSH tunnel进行安装部署,需要事先建立RKE到各节点的SSH免密登录。如果集群中有3个节点,需要在RKE机器上执行1遍秘钥生成命令ssh-keygen,并将生成侧公钥通过分发命令:ssh-copy-id {user}@{ip}。
1)在各个节点(10.0.32.177、10.0.32.178、10.0.32.175)上创建ssh用户,并将其添加至docker组中:
useradd docker_user
usermod -aG docker docker_user
注意:重启系统以后才能生效,只重启Docker服务是不行的!重启后,docker_user用户也可以直接使用docker run命令。
2)在rke所在主机上创建密钥:
ssh-keygen
3)将rke所在主机生成的密钥的公钥分发到各个节点:
#ssh-copy-id [email protected]
#ssh-copy-id [email protected]
#ssh-copy-id [email protected]
1、安装RKE
从GitHub(https://github.com/rancher/rke/releases)仓库安装下载RKE。 RKE可以在Linux和MacOS机器上运行。安装完成后,运行以下代码,确保您使用的是最新版本:
./rke --version
./rke --help
2、集群配置文件
默认情况下,RKE将查找名为cluster.yml的文件,该文件中包含有关将在服务器上运行的远程服务器和服务的信息。cluster.yml文件应该是这样的:
#节点信息
nodes:
#master和etcd节点
- address: 10.0.32.175
user: docker_user
role: [controlplane,etcd]
#工作节点
- address: 10.0.32.177
user: docker_user
ssh_key_path: ~/.ssh/id_rsa
role: [worker]
- address: 10.0.32.178
ssh_key_path: ~/.ssh/id_rsa
user: docker_user
role: [worker]
#服务信息
services:
etcd:
image: quay.io/coreos/etcd:latest
kube-api:
pod_security_policy: false
image: rancher/k8s:v1.8.5-rancher4
service_cluster_ip_range: 10.233.0.0/18
kube-controller:
cluster_cidr: 10.233.64.0/18
image: rancher/k8s:v1.8.5-rancher4
scheduler:
image: rancher/k8s:v1.8.5-rancher4
kubelet:
cluster_domain: cluster.local
cluster_dns_server: 10.233.0.3
infra_container_image: gcr.io/google_containers/pause-amd64:3.0
image: rancher/k8s:v1.8.5-rancher4
kubeproxy:
image: rancher/k8s:v1.8.5-rancher4
#网络模式
network:
plugin: flannel
#镜像
system_images:
flannel: rancher/coreos-flannel:v0.9.1
kubedns: rancher/k8s-dns-kube-dns-amd64:1.14.5
dnsmasq: rancher/k8s-dns-dnsmasq-nanny-amd64:1.14.5
kubedns_sidecar: rancher/k8s-dns-sidecar-amd64:1.14.5
kubedns_autoscaler: rancher/cluster-proportional-autoscaler-amd64:1.0.0
dashboard: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
#认证模式
authentication:
strategy: x509
集群配置文件包含一个节点列表。每个节点至少应包含以下值:
地址 – 服务器的SSH IP
用户 – 连接到服务器的SSH用户
角色 – 主机角色列表:worker,controlplane或etcd
另一节是"服务",其中包含有关将在远程服务器上部署的Kubernetes组件的信息。
有三种类型的角色可以使用主机:
etcd – 这些主机可以用来保存集群的数据。
controlplane – 这些主机可以用来存放运行K8s所需的Kubernetes API服务器和其他组件。
worker – 这些是您的应用程序可以部署的主机。
3、安装Kubernetes
#要运行RKE,首先要确保cluster.yml文件在同一个目录下
./rke up
#若想指向另一个配置文件
./rke up --config /tmp/config.yml
4、安装网络插件
RKE是一个幂等工具,可以运行多次,且每次均产生相同的输出。如下的网络插件它均可以支持部署:
Calico
Flannel (default)
Canal
要使用不同的网络插件,您可以在配置文件中指定:
network:
plugin: calico
5、添加或删除节点
RKE支持为角色为worker和controlplane的主机添加或删除节点。
1)添加节点:
要添加其他节点,只需要更新具有其他节点的集群配置文件,并使用相同的文件运行集群配置即可。
2)删除节点:
要删除节点,只需从集群配置文件中的节点列表中删除它们,然后重新运行rke up命令。
6、高可用
RKE工具是满足高可用的。您可以在集群配置文件中指定多个控制面板主机,RKE将在其上部署主控组件。
默认情况下,kubelets被配置为连接到nginx-proxy服务的地址——127.0.0.1:6443,该代理会向所有主节点发送请求。
要启动HA集群,只需使用controlplane角色指定多个主机,然后正常启动集群即可。
1、安装kubectl
1)下载安装kubectl
#配置yum仓库
cat > /etc/yum.repos.d/kubernetes.repo << END
[kubernetes]
name = kubernetes
baseurl = https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgchek = 1
gpgkey = https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enable = 1
END
#安装kubectl
yum -y install kubectl
2)配置kubeconfig文件
RKE会在配置文件所在的目录下部署一个本地文件,该文件中包含kube配置信息以连接到新生成的群集。
默认情况下,kube配置文件被称为.kube_config_cluster.yml。将这个文件复制到你的本地~/.kube/config,就可以在本地使用kubectl了。
需要注意的是,部署的本地kube配置名称是和集群配置文件相关的。例如,如果您使用名为mycluster.yml的配置文件,则本地kube配置将被命名为.kube_config_mycluster.yml。
2、验证
执行kubectl命令,获取nodes的信息:
kubectl get nodes
1、安装
1)下载kubernetes-dashboard.yaml文件
官网地址:https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/
github地址:https://github.com/kubernetes/dashboard
kubernetes-dashboard.yaml文件下载地址:https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
2)编辑kubernetes-dashboard.yaml文件
①修改Deployment镜像地址:
将 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1 更改为
registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
②修改Service:
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort #主要是添加了类型
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
3)通过执行如下的命令部署Web UI
kubectl create -f kubernetes-dashboard.yaml
2、创建一个管理员用户
1)创建amind-user.yaml文件,文件内容如下:
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBinding
metadata:
name: admin-user
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
2)通过执行如下命令创建admin-user:
#kubectl create -f admin-user.yaml
3)获取管理员用户的Token
通过执行如下命令获取系统Token信息:
kubectl describe secret admin-user --namespace=kube-system
4)添加Token至kubeconfig文件
通过编辑工具打开kubeconfig文件(~/.kube/config),并添加Token。
5)导入kubeconfig文件
在界面中导入kubeconfig文件。
3、删除集群
RKE支持rke remove命令。该命令执行以下操作:
连接到每个主机并删除部署在其上的Kubernetes服务。
从服务所在的目录中清除每个主机:
/etc/kubernetes/ssl
/var/lib/etcd
/etc/cni
/opt/cni
注意,这个命令是不可逆的,它将彻底摧毁Kubernetes集群。
备注: 参考链接