下面演示在国内,在虚拟机ubuntu18.04中利用kubeadm,从零搭建一个有1个master的kubernetes环境

一、ubuntu18.04安装及环境配置

从官网下载ubuntu18.04的镜像,并使用vmware进行安装,一路默认配置就可以了,安装完毕之后进行如下操作。

1. 【非虚拟机不用】设置静态IP和访问外网,这样方便后面使用xshell进行登录,具体配置可以看 《VMware下如何实现ubuntu的静态地址设置和外网访问和ssh连接

2. 修改apt源

vi /etc/apt/sources.list
#内容如下
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

执行如下操作

sudo apt update
sudo apt upgrade

3. 关闭swap

编辑/etc/fstab文件,注释掉引用swap的行,保存并重启后输入sudo swapoff -a即可。

二、软件安装

1. docker安装与配置

sudo apt install docker.io
#配置镜像加速器,参考:https://yq.aliyun.com/articles/29941

#重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker

2. 安装kubeadm、kubelet、kubectl

使用国内的镜像源

sudo apt-get update && sudo 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  
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
# 如果需要指定版本可以使用apt install -y kubelet=1.14.5-00

三、k8s镜像处理

国内是不太容易下载k8s.gcr.io站点的镜像的, 使用阿里镜像源拉取进行之后,利用tag重新打标签的方式进行镜像下载困难的处理,脚本如下(代码来自:https://blog.csdn.net/weixin_30456039/article/details/101436638):

#!/bin/bash
# download k8s 1.15.2 images
# get image-list by 'kubeadm config images list --kubernetes-version=v1.15.2'
# gcr.azk8s.cn/google-containers == k8s.gcr.io
#images=(
#kube-apiserver:v1.15.2
#kube-controller-manager:v1.15.2
#kube-scheduler:v1.15.2
#kube-proxy:v1.15.2
#pause:3.1
#etcd:3.3.10
#coredns:1.3.1
#)
if [ $# -ne 1 ];then
    echo "please user in: ./`basename $0` KUBERNETES-VERSION"
    exit 1
fi
version=$1
 
images=`kubeadm config images list --kubernetes-version=${version} |awk -F'/' '{print $2}'`
 
for imageName in ${images[@]};do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag  registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi  registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

将上述脚本保存为pull.sh

chmod +x pull.sh
./pull.sh v1.16.2

四、k8s安装 

1. 安装master节点

sudo kubeadm init --apiserver-advertise-address 192.168.13.182  --kubernetes-version=v1.16.2 --pod-network-cidr=10.244.0.0/16

init 常用主要参数:

  • –kubernetes-version: 指定Kubenetes版本,如果不指定该参数,会从google网站下载最新的版本信息。
  • –pod-network-cidr: 指定pod网络的IP地址范围,它的值取决于你在下一步选择的哪个网络网络插件,比如我在本文中使用的是 flannel 网络,需要指定为10.244.0.0/16。
  • –apiserver-advertise-address: 指定master服务发布的Ip地址,如果不指定,则会自动检测网络接口,通常是内网IP。

安装完成之后记得保存结果

 

2. 按上述图片中的提示输入三个命令

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

3. 安装网络插件

此时使用kubectl get nodes可以查看到master节点,但是它的状态是notReady,需要安装一个网络插件,毕竟Pod之间是需要网络通信的。

这里我们选择flannel,其yaml文件:https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 

通过yaml文件可以知道需要下载quay.io的镜像,可以参考:https://www.ilanni.com/?p=14534,根据上面的网址,我们使用下面的脚本下载镜像

#!/bin/bash
 
images=(
flannel:v0.11.0-amd64
flannel:v0.11.0-arm64
flannel:v0.11.0-arm
flannel:v0.11.0-ppc64le
flannel:v0.11.0-s390x
)
 
for imageName in ${images[@]};do
    docker pull quay.azk8s.cn/coreos/$imageName  
    docker tag  quay.azk8s.cn/coreos/$imageName quay.io/coreos/$imageName  
    docker rmi  quay.azk8s.cn/coreos/$imageName
done

将上面的脚本 文件保存为pull-quay-io-flannel.sh,执行如下操作

chmod +x pull-quay-io-flannel.sh
./pull-quay-io-flannel.sh

如果还是没有办法下载镜像,可以直接从下面的百度网盘链接下载,里面有一个flannel的amd版本

链接:https://pan.baidu.com/s/1Irfp_Owx0kKGgL4d60Z2Ng 
提取码:z9xe 

执行如下命令安装flannel

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

插件安装完成后,可以通过检查coredns pod的运行状态来判断网络插件是否正常运行。等待coredns pod的状态变成Running,就可以继续添加从节点了。

4. 让master部署节点:https://www.cnblogs.com/RainingNight/p/using-kubeadm-to-create-a-cluster-1-12.html

如果你只部署了一个master结点的话,直接kubectl apply -f 应用的话,会发现无法部署,如下

# busybox.yaml
apiVersion: v1
kind: Pod
metadata:
  name: first-pod
  labels:
    app: bash
    tir: backend
spec:
  containers:
  - name: bash-container
    image: docker.io/busybox
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
#执行如下命令
kubectl apply -f busybox.yaml
#查看部署情况
kubectl get pod
# 你会发现那个pod一直在pending,查看原因
kubectl get pod/first-pod -o yaml
#查看status字段,可以看到 message: '0/1 nodes are available: 1 node(s) had taints that the pod didn''t tolerate.' 所以了让我们的master结点可以部署(毕竟是只有一个结点),我们执行如下操作,去掉master的标签

kubectl taint nodes --all node-role.kubernetes.io/master- 
#再度执行
kubectl get pod #可以发现已经running了

链接

1)解决镜像下载的网址:https://blog.csdn.net/weixin_30456039/article/details/101436638https://www.ilanni.com/?p=14534

2)主要参考:https://tomoyadeng.github.io/blog/2018/10/12/k8s-in-ubuntu18.04/index.html

Logo

开源、云原生的融合云平台

更多推荐