系统防火墙配置
禁用防火墙
systemctl disable firewalld
关闭防火墙
systemctl stop firewalld
禁用 SELinux,目的是让容器可以读取主机文件系统
setenforce 0
配置禁用 SELinux,修改 SELINUX 为 disabled
SELINUX=disabled
vi /etc/sysconfig/selinux
禁用当前的 swap
sudo swapoff -a
同时永久禁掉swap分区,打开如下文件注释掉swap那一行
vi /etc/fstab
1. 必备工具
1.kubectl - Kubernetes命令行工具。
2.rke - Rancher Kubernetes Engine,cli用于构建Kubernetes集群。
3.helm - Kubernetes的包管理。
1.1 安装 kubectl
Debian / Ubuntu
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubectl
CentOS / RHEL / Fedora
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubectl
1.2 安装 rke
MacOS:rke_darwin-amd64
Linux(Intel / AMD):rke_linux-amd64
Linux(ARM 32位):rke_linux-arm
Linux(ARM 64位):rke_linux-arm64
Windows(32位):rke_windows-386.exe
Windows(64位):rke_windows-amd64.exe
将RKE二进制文件复制到您的文件夹中$PATH并重命名 rke(或 rke.exe 用于 Windows)。
$PATH
echo $PATH
# MacOS
$ mv rke_darwin-amd64 rke
# 增加可执行权限
$ chmod +x rke
# Linux
$ mv rke_linux-amd64 rke
# 增加可执行权限
$ chmod +x rke
# Windows PowerShell
> mv rke_windows-amd64.exe rke.exe
验证安装:
$ rke --version
# 输出类似下面版本信息
rke version v0.2.6
1.3 安装 Helm
MacOS amd64
Linux amd64
Linux arm
Linux arm64
Linux i386
Linux ppc64le
Linux s390x
Windows amd64
下载后解压(tar -zxvf helm-v2.0.0-linux-amd64.tgz),然后将 helm 程序放到 $PATH 中(mv linux-amd64/helm /usr/bin/helm)。
验证安装:
$ helm version
# 输出类似下面信息
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Error: Get http://localhost:8080/api/v1/namespaces/kube-system/pods?labelSelector=app%3Dhelm%2Cname%3Dtiller: dial tcp [::1]:8080: connect: connection refused
2.1 创建节点和负载均衡器
2.2 使用RKE安装Kubernetes
使用RKE安装高可用etcd配置的Kubernetes
2.2.1安装Docker CE
在阿里巴巴开源镜像站还可以搜 docker-ce,帮助中给了一个地址
阿里巴巴开源镜像docker-ce
systemctl enable docker
systemctl start docker
systemctl status docker
添加国内加速代理,设置storage-driver
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/","https://kw88y6eh.mirror.aliyuncs.com"],
"insecure-registries":["192.168.112.69"],
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
EOF
registry-mirrors:表示公网的加速器地址,可设置多个,地址需要添加协议头(https或者http)。
insecure-registries:表示内网的私服地址,地址不能添加协议头(http)。
storage-driver:表示使用OverlayFS的overlay2存储驱动。
重启docker
systemctl daemon-reload
systemctl restart docker
其他相关命令
启动docker
systemctl start docker
关闭docker
systemctl stop docker
查看docker的运行状态
systemctl status docker
查看docker镜像
docker images
删除docker镜像
docker rmi IMAGE ID
2.2.2重要提示!
如果你也使用的 RedHat/CentOS,在开篇已经提醒过,不能使用 root 账号,因此要添加专用的账号进行 docker 操作。
需要在每个节点重复该操作添加账号
创建 rancher 用户:
useradd rancher
添加到 docker 组:
usermod -aG docker rancher
设置密码
echo "123456" | passwd --stdin rancher
2.2.3配置 ssh_key 登录
-------------------------------------------第一种方法-------------------------------------------
ssh免密登录
在node1和node2服务器上均执行下面命令
su rancher
ssh-keygen
ssh-copy-id rancher@192.168.1.20
ssh-copy-id rancher@192.168.1.30
-------------------------------------------第一种方法-------------------------------------------
2.2.3配置 ssh_key 登录
-------------------------------------------第二种方法-------------------------------------------
假设分别为 NODE1, NODE2 2个节点。
分别在每个节点上执行下面的命令生成密钥(rancher账户)
$ ssh-keygen -t rsa
# 之后会有一些默认选项和可以手工配置的选项,可以自行配制,或者一直回车用默认值
# 执行完成后,会生成两个文件
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
查看 id_rsa.pub 文件,复制文件内容,将 3 个节点的文件集合到一起,在每个节点上,切换到 rancher 用户,然后执行下面的命令:
# 切换到前面创建的用户
$ su rancher
# 进入自己的 home 目录
$ cd ~
# 创建 .ssh 目录
$ mkdir .ssh
# 写入3个服务的公钥
$ echo "复制的内容" >> .ssh/authorized_keys
# 设置权限
$ chmod 700 .ssh
$ chmod 644 .ssh/authorized_keys
配置后可以在 NODE1 测试:(NODE1和NODE2可以互相登录对方)
$ ssh rancher@NODE2
# 连接成功后通过 exit 退出
-------------------------------------------第二种方法-------------------------------------------
2.2.4创建 rancher-cluster.yml 配置文件
参考下面的示例创建rancher-cluster.yml文件,替换 nodes 3个节点的配置信息。
nodes:
- address: 192.168.1.20
internal_address: 192.168.1.20
user: rancher
role: [controlplane,worker,etcd]
- address: 192.168.1.30
internal_address: 192.168.1.30
user: rancher
role: [worker]
services:
etcd:
snapshot: true
creation: 6h
retention: 24h
2.2.5运行 RKE
根据自己的配置修改保存好 rancher-cluster.yml 后,执行下面的命令:
rke up --config ./rancher-cluster.yml
2.2.6测试集群
集群创建成功后,在当前目录下面有以下文件:
-rw-r----- 1 root root 5382 Aug 1 16:17 kube_config_rancher-cluster.yml
-rw-r----- 1 root root 114422 Aug 1 16:18 rancher-cluster.rkestate
-rw-r--r-- 1 root root 423 Aug 1 15:50 rancher-cluster.yml
将 kube_config_rancher-cluster.yml 复制到 $HOME/.kube,修改名称为config,如果想在其他节点通过 kubectl 访问集群,将该文件复制到其他节点的相同路径下。
$HOME
echo $HOME
mkdir .kube
cp kube_config_rancher-cluster.yml .kube/config
现在可以通过 kubectl 来查看当前的节点状态:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
10.10.1.238 Ready controlplane,etcd,worker 16m v1.14.3
10.10.1.241 Ready controlplane,etcd,worker 16m v1.14.3
10.10.1.242 Ready controlplane,etcd,worker 16m v1.14.3
检查集群 Pods 运行状况
检查所有必需的Pod和容器是否健康可以继续。
Pod处于Running或Completed状态。
READY列显示所有容器正在运行(如 3/3)的 Pod 状态是 Running
Pod 状态为Completed是一次运行的Job。这些Pod 的READY应该是0/1。
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
ingress-nginx default-http-backend-5954bd5d8c-9c2cg 1/1 Running 0 19m
ingress-nginx nginx-ingress-controller-6zvql 1/1 Running 0 19m
ingress-nginx nginx-ingress-controller-7qjms 1/1 Running 0 19m
ingress-nginx nginx-ingress-controller-8r2xs 1/1 Running 0 19m
kube-system canal-mx6p6 2/2 Running 0 19m
kube-system canal-r7prj 2/2 Running 0 19m
kube-system canal-xddff 2/2 Running 0 19m
kube-system coredns-86bc4b7c96-gmzd6 1/1 Running 0 19m
kube-system coredns-autoscaler-5d5d49b8ff-rj8qj 1/1 Running 0 19m
kube-system metrics-server-7f6bd4c888-mkshr 1/1 Running 0 19m
kube-system rke-coredns-addon-deploy-job-9jqns 0/1 Completed 0 19m
kube-system rke-ingress-controller-deploy-job-m8sjn 0/1 Completed 0 19m
kube-system rke-metrics-addon-deploy-job-djslk 0/1 Completed 0 19m
kube-system rke-network-plugin-deploy-job-jj887 0/1 Completed 0 19m
保存文件
重要信息
需要下面提到的文件来维护,排除故障并升级您的集群。
将以下文件的副本保存在安全位置:
rancher-cluster.yml:RKE集群配置文件。
kube_config_rancher-cluster.yml:集群的 Kube config文件,此文件包含完全访问集群的凭据。
rancher-cluster.rkestate:Kubernetes集群状态文件,此文件包含完全访问集群的凭据。
仅在使用RKE v0.2.0或更高版本时才会创建Kubernetes集群状态文件。
3.1初始化Helm(Tiller)
Helm是Kubernetes首选的包管理工具。Helm“chart”为Kubernetes YAML清单文档提供模板语法。使用Helm,我们可以创建可配置的部署,而不仅仅是使用静态文件。
在集群上安装Tiller
Helm tiller 在群集上安装服务以管理charts。由于RKE默认启用RBAC,因此我们需要使用kubectl创建serviceaccount 和 clusterrolebinding 让 tiller具有部署到集群的权限。
3.1.1在kube-system命名空间中创建ServiceAccount。
kubectl -n kube-system create serviceaccount tiller
3.1.2创建ClusterRoleBinding以授予tiller帐户对群集的访问权限。
kubectl create clusterrolebinding tiller \
--clusterrole=cluster-admin \
--serviceaccount=kube-system:tiller
3.1.3最后用helm安装tiller服务
这里特别提到中国。我们需要靠aliyun了。
# 查看版本号
helm version
# Client: &version.Version{SemVer:"v2.14.3", GitCommit:"...", GitTreeState:"clean"}
# 使用版本号替换下面命令的版本号
helm init --service-account tiller --skip-refresh \
--tiller-image registry.cn-shanghai.aliyuncs.com/rancher/tiller:v2.14.3
3.1.4查看 tiller 状态
kubectl get pods --all-namespaces
# 省略其他
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system tiller-deploy-7464dff9-7msvc 0/1 Running 0 18s
测试 Tiller
运行下面的命令验证:
kubectl -n kube-system rollout status deploy/tiller-deploy
显示以下表示安装成功
deployment "tiller-deploy" successfully rolled out
运行以下命令以验证Helm是否可以与tiller服务进行通信:
helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
3.2安装Rancher
3.2.1安装 cert-manager
使用常规清单安装
注意:从cert-manager v0.11.0开始,Kubernetes的最低支持版本是v1.12.0。仍在运行Kubernetes v1.11或更低版本的用户应在安装cert-manager之前升级到受支持的版本。
创建一个名称空间以在其中运行cert-manager
kubectl create namespace cert-manager
我们可以继续安装cert-manager。所有资源(CustomResourceDefinitions,cert-manager和webhook组件)都包含在单个YAML清单文件中:
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.13.0/cert-manager.yaml
查看 cert-manager rollout 状态:
kubectl -n kube-system rollout status deploy/cert-manager
显示以下表示安装成功
deployment "cert-manager" successfully rolled out
3.2.2安装rancher
添加Helm Chart Repository
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
修改客户端的 hosts 配置映射
前两点修改很容易,修改 Windows 中的 C:\Windows\System32\drivers\etc\hosts 或者 Linux 中的 /etc/hosts,增加下面的映射:
# 负载均衡对应的实际IP 自定义域名
# 例如下面
192.168.1.20 rancher.my.org
详细请参照 安装 Rancher
helm install rancher-stable/rancher \
--name rancher \
--namespace cattle-system \
--set hostname=rancher.my.org