♦♦♦这里介绍使用kubeadm安装k8s集群,由于这种搭建方式须要访问grc.io(https://cloud.google.com/container-registry/)(国内被墙了)下载对应的image,因此须要确保本身能访问该网站♦♦♦html
♦♦♦即便网络不能访问,也有折中的解决办法,具体请看详细安装步骤♦♦♦node
安装前准备:linux
下面使用kubeadm来建立k8s cluster
1. 全部主机节点上都须要安装dockergit
# sudo apt-get update # sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common # curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # sudo apt-key fingerprint 0EBFCD88 output: pub rsa4096 2017-02-22 [SCEA] 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid [ unknown] Docker Release (CE deb) <docker@docker.com> sub rsa4096 2017-02-22 [S] # sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" # sudo apt-get update # sudo apt-get install docker-ce docker-ce-cli containerd.io
其余操做系统参考官方文档: https://docs.docker.com/install/linux/docker-ce/ubuntu/github
2. config /etc/hostname,config every node and hostnamedocker
修改主机名,规划好master和nodeubuntu
修改/etc/hostname文件来永久修改hostnameapi
$ sudo hostnamectl set-hostname k8s-nodexbash
3. (独立安装 kubectl,能够跳过本部选择在步骤4中一块儿安装)在全部节点上安装 kubectl网络
# curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl # curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt #获取当前稳定版本 # curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.1/bin/linux/amd64/kubectl #版本号根据须要可自行修改 # chmod +x ./kubectl # sudo mv ./kubectl /usr/local/bin/kubectl # source <(kubectl completion bash)
###ubuntu版本若是支持快捷安装能够执行如下命令来安装###
# sudo snap install kubectl --classi
4. 在全部节点上安装 kubectl kubelet kubeadm
# apt-get update && apt-get install -y apt-transport-https # curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - # cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF # apt-get update # apt-get install -y kubectl kubelet kubeadm
国内请使用aliyun源:
# sudo apt-get update && apt-get install -y apt-transport-https # sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - # sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF # sudo apt-get update
# apt-get install -y kubectl kubelet kubeadm
5. 初始化master节点
♦♦♦
Kubenetes默认Registries地址是k8s.gcr.io
,很明显,在国内并不能访问gcr.io,所以在kubeadm v1.13以前的版本,安装起来很是麻烦,可是在1.13
版本中终于解决了国内的痛点,其增长了一个--image-repository
参数,默认值是k8s.gcr.io
,咱们将其指定为国内镜像地址:registry.aliyuncs.com/google_containers
,其它的就能够彻底按照官方文档来操做。
咱们还须要指定--kubernetes-version
参数,由于它的默认值是stable-1
,会致使从https://dl.k8s.io/release/stable-1.txt
下载最新的版本号,咱们能够将其指定为固定版本(最新版:v1.14.2)来跳过网络请求。
♦♦♦
pod网络插件是必要安装,以便pod能够相互通讯. 请提早确认本身须要使用的pod网络插件,以Flannel为例,为了使Flannel正常工做,执行kubeadm init命令时须要增长--pod-network-cidr=10.244.0.0/16参数
# kubeadm init --pod-network-cidr=10.244.0.0/16 # k8s.gcr.io能够访问的状况下能够直接执行init
# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.14.2 --pod-network-cidr=10.244.0.0/16 # 经过跳转registry的方式安装
以上两种init的方式本身根据状况选择执行
use tocken: qjm4v2.8mqfbjrtjpf2xmq2
output:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
# mkdir -p $HOME/.kube # sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config # sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.100.0.128:6443 --token qjm4v2.8mqfbjrtjpf2xmq2 \
--discovery-token-ca-cert-hash sha256:65131ae78527130dfd6ccf0b6be6e86d2089c4d07856d7f318cede1ce84fb0ef
6. 安装pod网络插件flannel
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
这里因为国内墙的缘由,kubelet可能没法拉取flannel镜像,须要手动执行命令拉取:
flannel 镜像详细的版本号能够执行如下命令查询:
# kubectl get pod -n kube-system
# kubectl describe pod kube-flannel-ds-amd64-xxx -n kube-system # kube-flannel-ds-amd64-xxx 为上一条命令查询出来的flannel pod
拉取镜像:
# docker pull quay.io/coreos/flannel:v0.11.0-amd64 # 若是不能直接链接gcr.io,在node节点上也要手动拉取这个镜像
§§特别说明一下,因为我家里是长城宽带,执行命令拉取的时候仍是报错,因而我用手机共享了手机联通网络作热点,结果还真的下载成功了!§§
再次安装flannel插件便可:
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
而后再查询集群状态,能够看到kube-flannel-ds-xxx Pod状态为running,master节点状态也变为Ready,代表master节点初始化成功了。happy!!!
flannel支持多种模型
7. 添加node工做节点
# kubeadm join --token <token> <master-ip>:<master-port>
这里能够直接copy master节点init过程末尾的kubeadm join 命令行直接执行
默认状况下,token的有效期是24小时,若是咱们的token已通过期的话,可使用如下命令从新生成:
# kubeadm token create
若是咱们也没有--discovery-token-ca-cert-hash
的值,可使用如下命令生成:
# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
8. 全部node节点加入到master节点以后,能够执行如下命令查看集群信息
# kubectl get nodes
[root@maple-master opt]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
maple-master Ready master 30m v1.14.2
k8s-node1 Ready node 2m v1.14.2
k8s-node2 Ready node 2m v1.14.2
Note: kubeadm reset 能够重置'kubeadm init' or 'kubeadm join'的操做。 同时须要删除家目录下的.kube 目录。才能恢复到初始化以前的状态
参考文档:http://docs.kubernetes.org.cn/459.html
https://kubernetes.io/zh/docs/setup/independent/install-kubeadm/
https://www.cnblogs.com/yitianyouyitian/p/10143217.html 解决了国内没法下载相关image的问题,成功init