一 . 准备机器
本次环境采用华为云ECS弹性云服务器部署(也可以使用VMware)
vm01(2V4G): Ubuntu_18.04作为K8S master节点
vm02(1V1G): Ubuntu_18.04作为K8S node节点
备注: 以下所有操作都是在root用户下执行
二 . 在master节点安装k8s和Docker
1.安装需要的包
由于apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书
sudo apt install apt-transport-https ca-certificates software-properties-common curl

2.添加 谷歌GPG 密钥
执行
curl -s https://mirrors.huaweicloud.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

从华为云开源镜像网站获取安装
3.安装docker 和kubeadm
首先我们修改一下Docker的镜像源,这里我们使用中科大USTC镜像源
echo “deb https://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main” \ > /etc/apt/sources.list.d/kubernetes.list

apt-get update ——安装docker

apt-get install -y docker.io kubeadm ——安装kubeadm

在上述安装 kubeadm 的过程中,docker 和kubeadm、 kubelet、kubectl 工具都会被自动安装好。
4.设置开机自启动并启动 Docker(后默认已设置自启动,可忽略)
systemctl enable docker
systemctl start docker
5.执行 kubeadm init 自动化安装kubernets

发现这7个k8s.gcr.io的镜像包无法获取。这就遇到了部署K8S最大的难题就是镜像下载,由于是国内机器, 如果不进行科学上网在国内很难从k8s.gcr.io等镜像源里下载镜像。
这种情况下我们可以 直接指定国内镜像代理仓库(如阿里云代理仓库)进行镜像拉取下载, 成功拉取代理仓库中的镜像后,再将其tag打标签成为k8s.gcr.io对应镜像,最后再删除从代理仓库中拉取下来的镜像,前提要确保imagePullPolicy策略是IfNotPresent,即本地有镜像则使用本地镜像,不拉取!或者将下载的镜像放到私有仓库里,然后将image下载源指向私仓地址。
因为不同的K8S版本需要的镜像包不一样,我们可以使用
kubeadm config images list 命令查询一下kubeadm所需的k8s镜像包版本

我们使用 docker pull 拉取所需镜像包(这里指定一下镜像源)
例:docker pull registry.aliyuncs.com/google_containers/coredns:1.7.0
docker pull registry.aliyuncs.com/google_containers/etcd:3.4.13-0

然后打tag,并删除之前从代理仓库下载的镜像
例:docker tag registry.aliyuncs.com/google_containers/coredns:1.7.0

docker rmi 镜像名称 ——删除pull下来的额镜像
例:docker rmi registry.aliyuncs.com/google_containers/etcd:3.4.13-0


然后再执行 kubeadm init 就可以了

执行完成后k8s即安装完成,最后会输出kubeadm join那段命令,这个是node节点加入集群必须执行的命令。但是kubeadm init自动生成的token有效期只有24小时。
kubeadm join 192.168.0.3:6443 --token 9dimd4.cte6oheldr8p7ecq
–discovery-token-ca-cert-hash sha256:aad7cddf4764b9a576d315096c24059de53486f187a9135c8067268aa7167403

当然我们也可以使用
kubeadm token create --ttl 0
生成一个永不过期的 token(olt9w7.6yew4d24q40n5raa),后续node节点加入集群是要用到。

执行
kubectl get nodes

发现报错了,第一次使用k8s需要执行下面命令配置kubect所需文件。
执行下面命令:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown (id−u):(id -u):(id−u):(id -g) HOME/.kube/config再次执行kubectlgetnodes就行了可以发现当前节点状态NotReady状态使用下面命令查看kubelet日志,看到网络插件没有安装journalctl−f−ukubelet执行下面命令安装weave插件kubectlapply−fhttps://cloud.weave.works/k8s/net?k8s−version=HOME/.kube/config
再次执行kubectl get nodes 就行了

可以发现当前节点状态NotReady状态
使用下面命令查看kubelet日志,看到网络插件没有安装
journalctl -f -u kubelet

执行下面命令安装weave插件
kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version=HOME/.kube/config再次执行kubectlgetnodes就行了可以发现当前节点状态NotReady状态使用下面命令查看kubelet日志,看到网络插件没有安装journalctl−f−ukubelet执行下面命令安装weave插件kubectlapply−fhttps://cloud.weave.works/k8s/net?k8s−version=(kubectl version | base64 | tr -d ‘\n’)


看到节点已经正常了。master节点已经安装完成。
相关服务:日本CN2服务器租用
三. node节点加入集群
1、登陆vm02,node节点虚拟机,参考前面步骤1 2 3 4,安装kubeadm和docker 但是不执行kubeadm init
2 、然后需要下载kube-proxy pause镜像(同上,先拉取镜像再修改tag)
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.20.2
docker pull registry.aliyuncs.com/google_containers/pause:3.2
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.20.2 k8s.gcr.io/kube-proxy:v1.20.2
docker tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.20.2
docker rmi registry.aliyuncs.com/google_containers/pause:3.2

3 、执行kubeadm join命令加入集群(join命令是master安装时生成的)
这里token换成永久的token
kubeadm join 192.168.0.3:6443 --token 9dimd4.cte6oheldr8p7ecq
–discovery-token-ca-cert-hash sha256:aad7cddf4764b9a576d315096c24059de53486f187a9135c8067268aa7167403
4、安装weave网络插件
这里要用到kubectl命令,但是node节点不是master 无法执行。所以按照下面命令,admin.conf文件从master主机拷贝到node节点。
mkdir -p $HOME/.kube
scp {masterip}:/etc/kubernetes/admin.conf $HOME/.kube/config
chown (id−u):(id -u):(id−u):(id -g) HOME/.kube/config安装weave:kubectlapply−f"https://cloud.weave.works/k8s/net?k8s−version=HOME/.kube/config

安装weave:
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=HOME/.kube/config安装weave:kubectlapply−f"https://cloud.weave.works/k8s/net?k8s−version=(kubectl version | base64 | tr -d ‘\n’)"
5、查看node节点状态,部署完成。

