最近在学习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
命令及参数,如图所示

kubeadm join
命令及参数,如下图所示

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

# 以下命令二选一
# 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 环境满足以上的要求,那么可以接着执行下面的步骤了。
- 在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
- 创建 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
- 创建集群 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
- 克隆 kubesphere-installer 仓库至本地。
yum install git
git clone https://github.com/kubesphere/ks-installer.git
- 进入 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_host
和etcd_endpoint_ips
为机器的内网IP



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

