快速搭建kubernetes与kubeSphere环境(亲测有效)

3,231 阅读2分钟

最近在学习k8s,但是安装k8s实在太麻烦了,也耗费了不少时间,下面来说说安装步骤。以下是我的机器配置,其实2核4G也可以,但是因为我想学习下kubeSphere就要求配置高了,我在这上面也耗费了不少时间,鄙人特将学习过程记录下来,希望各位看官给个赞,码字不易,越看越有劲。

第一步-修改hostname(可选)

如果在安装使用k8s中出现以下错误, 则需要修改hostname:

name: Invalid value: "k8s_master": a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for
 validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')

出现hostname不合法的情况, 执行以下命令修改hostname

# 修改 hostname
hostnamectl set-hostname your-new-host-name
# 查看修改结果
hostnamectl status
# 设置 hostname 解析
echo "127.0.0.1   $(hostname)" >> /etc/hosts

第二步-安装必要软件

使用 root 身份在所有节点执行如下代码,以安装软件:

  • docker
  • nfs-utils
  • kubectl / kubeadm / kubelet
# 在 master 节点和 worker 节点都要执行
curl -sSL https://kuboard.cn/install-script/v1.15.4/install-kubelet.sh | sh

脚本具体内容=> install-kubelet.sh

第三步-安装k8s单Master节点集群

注意事项:

  • 以 root 身份在 master-k8s 机器上执行
  • 初始化 master 节点时,如果因为中间某些步骤的配置出错,想要重新初始化 master 节点,请先执行 kubeadm reset 操作
  • POD_SUBNET 所使用的网段不能与 master节点/worker节点 所在的网段重叠。该字段的取值为一个 CIDR 值,如果您对 CIDR 这个概念还不熟悉,请不要修改这个字段的取值 10.100.0.1/20

执行以下命令只在 master-k8s 节点机器执行

# 替换 x.x.x.x 为 master-k8s 节点实际 IP(请使用内网 IP)
# export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令
export MASTER_IP=172.18.24.217
# 替换 apiserver.demo 为 您想要的 dnsName (不建议使用 master 的 hostname 作为 APISERVER_NAME)
export APISERVER_NAME=apiserver.demo
# Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
export POD_SUBNET=10.100.0.1/20
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
curl -sSL https://kuboard.cn/install-script/v1.15.4/init-master.sh | sh

脚本具体内容=> init-master.sh

检查 master 初始化结果

# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide

# 查看 master 节点初始化结果
kubectl get nodes -o wide

第四步-初始化 worker节点

在 master-k8s 节点上执行以下命令

# 只在 master 节点执行
kubeadm token create --print-join-command
# 查看 master 节点初始化结果
kubectl get nodes -o wide

可获取 kubeadm join 命令及参数,如图所示

在其它的work节点(也就是首图ecs中的node1,2,3)执行kubeadm join 命令及参数,如下图所示
此时再到 master-k8s节点执行 kubectl get nodes -o wide 可以看到有新的节点加入了

第五步-安装helm(kubeSphere准备工作)

执行以下命令

wget https://get.helm.sh/helm-v2.16.0-linux-amd64.tar.gz
tar zxvf helm-v2.16.0-linux-amd64.tar.gz 
mv linux-amd64/helm /usr/local/bin/
helm version

执行helm version 可以看到client已经安装好了,但是server端还没有安装。

创建rbac-config.yaml文件

vi rbac-config.yaml

输入以下内容:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

保存后执行kubectl create -f rbac-config.yaml

以上步骤配置成功后,安装tiller (和helm client的版本要一样)

# 以下命令二选一

# google源
helm init --service-account tiller --upgrade -i gcr.io/kubernetes-helm/tiller:v2.16.0
# 阿里源
helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.16.0 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

# 参数--stable-repo-url用于拉取charts所在源的位置,如果不设置则默认访问官方charts
# 查看tiller是否安装成功    
kubectl get pod -n kube-system -l app=helm

再次执行 helm version可以看到client和service都安装好了

第六步-正式部署 KubeSphere

版本要求:

框架 版本
Kubernetes >=1.13.0 && <=1.16.0
GitVersion >v1.13.0
Helm >= 2.10.0

机器要求:

集群work节点可用总内存至少10G以上,建议20G

如果你的 Kubernetes 环境满足以上的要求,那么可以接着执行下面的步骤了。

  1. 在master-k8s 节点安装kubeSphere
# 在Kubernetes 集群中创建名为 kubesphere-system 和 kubesphere-monitoring-system 的 namespace。

cat <<EOF | kubectl create -f -
---
apiVersion: v1
kind: Namespace
metadata:
    name: kubesphere-system
---
apiVersion: v1
kind: Namespace
metadata:
    name: kubesphere-monitoring-system
EOF
  1. 创建 Kubernetes 集群 CA 证书的 Secret。

注:按照当前集群 ca.crt 和 ca.key 证书路径创建(Kubeadm 创建集群的证书路径一般为 /etc/kubernetes/pki)

kubectl -n kubesphere-system create secret generic kubesphere-ca  \
--from-file=ca.crt=/etc/kubernetes/pki/ca.crt  \
--from-file=ca.key=/etc/kubernetes/pki/ca.key
  1. 创建集群 etcd 的证书 Secret。

注:根据集群实际 etcd 证书位置创建;

  • 若 etcd 已经配置过证书,则参考如下创建(以下命令适用于 Kubeadm 创建的 Kubernetes 集群环境):
kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs  \
--from-file=etcd-client-ca.crt=/etc/kubernetes/pki/etcd/ca.crt  \
--from-file=etcd-client.crt=/etc/kubernetes/pki/etcd/healthcheck-client.crt  \
--from-file=etcd-client.key=/etc/kubernetes/pki/etcd/healthcheck-client.key
  • 若 etcd 没有配置证书,则创建空 Secret:
kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs
  1. 克隆 kubesphere-installer 仓库至本地。
yum install git
git clone https://github.com/kubesphere/ks-installer.git
  1. 进入 ks-installer,然后在 Kubernetes 集群部署 KubeSphere。
cd deploy

# 根据参数说明列表,编辑 kubesphere-installer.yaml 中 ks-config.yaml 为当前集群参数信息(若 etcd 无证书,设置 etcd_tls_enable: False)
vim kubesphere-installer.yaml

kubectl apply -f kubesphere-installer.yaml

修改kube_apiserver_hostetcd_endpoint_ips为机器的内网IP

可选安装项, 用不上的可以先禁用

  1. 查看部署日志信息
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l job-name=kubesphere-installer -o jsonpath='{.items[0].metadata.name}') -f
  1. 安装成功 安装成功执行以下命令查看状态
kubectl get svc -n kubesphere-system

使用 IP:30880 访问 KubeSphere UI 界面,默认的集群管理员账号为 admin/P@88w0rd

由于也是学习中,所以把环境也共享出来给大家体验以下==> 在线体验地址-账号为 test/Test123

小技巧

查看指定 namespace 下 pod 所属的 node 节点

kubectl get pods -n istio-system -o wide

# 查看dev下的pod
kubectl get pods -n dev
## 查看pod xxx的yaml文件
kubectl get pods -n dev xxx -o yaml
# 获取namespace 为dev 的pod详情
kubectl get pods -n dev -o wide
# 创建pod
kubectl apply -f xxx.yaml
# 显示node的labeal
kubectl get nodes --show-labels
# 查看 namespace为dev下的pod详情
kubectl describe pods -n dev [podName]
## 查看node节点详情
kubectl describe nodes [nodeName] -o wide

碰到 status为ContainerCreating ,可以到对应pod所在的node节点上执行journalctl -f查看镜像或容器实时状态

参考

helm安装
使用 kubeadm 安装 kubernetes v1.15.4
kubesphere source 安装指南