官方说明:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

环境

  • Ubuntu 18.04
  • docker-ce_17.03.02

步骤

# 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 kubelet kubeadm kubectl
systemctl daemon-reload
systemctl restart kubelet
  • 基本工具已经安装,接下来就是使用kubeadm进行初始化
    在初始化过程中,会拉取部分k8s的镜像,来源是k8s.gcr.io。这个地址是Google的,所以,拉取会超时。可以自己在外围的服务器上,保存对应的镜像,下载下来load进本地。也可以使用备用的镜像,pull到本地后,修改tag。这里自己整理了需要使用的镜像,可以参考使用https://github.com/lsw1991abc/k8s-library
./pull.sh
  • 镜像完成后,就可以进行初始化了
    安装之后,需要手动配置pod的网络,如果你计划使用Flannel,需要在初始化时,指定--pod-network-cidr=10.244.0.0/16。相关网络的说明可以参考官方文档中的Installing a pod network一节。国内的朋友在初始化的时候,也需要指定k8s的version --kubernetes-version=1.10.3,这里我使用的1.10.3,可根据你使用的版本调整,需要从第4步中确定使用的版本。指定这个的原因是默认会从Google查询最新的版本下载,无法访问,会出错。所以,完成的初始化脚本:
kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=1.10.3 --apiserver-advertise-address=0.0.0.0

初始化结束后,根据提示创建目录及配置文件,另外,需要留存一下kubeadm join对应的内容,方便以后使用

  • 安装网络
    初始化结束后,可以执行kubectl get pods --all-namespaces查看节点的状态,这时kube-dns会一直处于pending状态。需要安装网络配置,我选择使用Flannel。说明
For flannel to work correctly, --pod-network-cidr=10.244.0.0/16 has to be passed to kubeadm init.
flannel works on amd64, arm, arm64 and ppc64le, but for it to work on a platform other than amd64 you have to manually download the manifest and replace amd64 occurrences with your chosen platform.
Set /proc/sys/net/bridge/bridge-nf-call-iptables to 1 by running sysctl net.bridge.bridge-nf-call-iptables=1 to pass bridged IPv4 traffic to iptables’ chains. This is a requirement for some CNI plugins to work, for more information please see here. kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
For more information about flannel, please see here.
sysctl net.bridge.bridge-nf-call-iptables=1

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

等待一段时间,就可以看到所有的都正常运行了。

# 部署
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.8.3/src/deploy/recommended/kubernetes-dashboard.yaml

# 代理,可访问
kubectl proxy

以上是官方说明。但按照这个方式配置后,在选择token登录时,点击无响应。相关问题https://github.com/kubernetes/dashboard/issues/2540。我们需要将dashboard的service类型改为NodePort,将端口映射到虚拟机上,然后直接通过虚拟机的ip地址登录

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.8.3/src/deploy/recommended/kubernetes-dashboard.yaml

修改kubernetes-dashboardService

# ------------------- Dashboard Service ------------------- #

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  # 添加Service的type为NodePort
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      # 添加映射的端口,k8s只支持30000以上的端口
      nodePort: 30001
  selector:
    k8s-app: kubernetes-dashboard

然后执行

kubectl apply -f kubernetes-dashboard.yaml

访问https://ip:30001/就可以打开了。记得一定是https

访问dashboard后,会有登录提示,选择使用token。token从哪里来?

自己创建user-admin.yml

# ------------------- ServiceAccount ------------------- #
apiVersion: v1
kind: ServiceAccount
metadata:
  name: user-admin
  namespace: kube-system

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

创建用户

kubectl apply -f user-admin.yaml

查询Token

# 查询kube-system空间下的secret
kubectl get secret -n kube-system
# 找到刚创建的用户user-admin-token-cgb89
kubectl -n kube-system describe secret user-admin-token-cgb89

得到Token,登录就可以了。

其他还有很多监控插件,例如heapster等,以后再做分享


感谢大家的阅读, 如有疑问可以加我微信