官方说明:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
环境
- Ubuntu 18.04
- docker-ce_17.03.02
步骤
- 安装Docker
https://kubernetes.io/docs/tasks/tools/install-kubeadm/。当前的k8s可以使用的Docker最高版本是17.03,所以需要手动下载安装包,这里我使用的是Ubuntu,下载地址https://download.docker.com/linux/ubuntu/dists/yakkety/pool/stable/amd64/ - 安装kubeadm、kubectl、kubelet
由于k8s官方提供的apt源来自packages.cloud.google.com
,能不能成功,呵呵呵。所以这里使用Aliyun的镜像源https://opsx.alibaba.com/mirror
# 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
- 配置
cgroup
https://kubernetes.io/docs/setup/independent/install-kubeadm/#configure-cgroup-driver-used-by-kubelet-on-master-node ,并重启kubelet
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 runningsysctl 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
等待一段时间,就可以看到所有的都正常运行了。
- 另外还有
Master Isolation
及Joining your nodes
两节,可以根据自己需要配置 - 安装Dashboard
https://github.com/kubernetes/dashboard
# 部署
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-dashboard
的Service
# ------------------- 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等,以后再做分享
感谢大家的阅读, 如有疑问可以加我微信
评论已关闭