kubeadm
kubeadm是一个构建k8s集群的工具。它提供的kubeadm init和 kubeadm join 两个命令是快速构建k8s集群的最佳实践。 其次,kubeadm工具只为构建最小可用集群,它只关心集群中最基础的组件,至于其他的插件(比如dashboard、CNI等)则不会涉及。
安装参考文档
- https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
环境准备
- 以ubuntu系统为例,Ubuntu20
- Kubernetes v1.8+ 要求关闭系统 Swap,请在所有节点利用以下指令关闭 (否则kubelet会出错!)
- 安装1.8版本的k8s,相关依赖版本参考:https://github.com/kubernetes/kubernetes/blob/release-1.18/build/dependencies.yaml
swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab
安装docker
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"# Step 4: 更新并安装 Docker-CE (指定版本)
sudo apt-get -y updatesudo apt-get install docker-ce=5:19.03.15~3-0~ubuntu-bionic docker-ce-cli=5:19.03.15~3-0~ubuntu-bionic
安装 kubelet 、kubeadm 、kubectl
apt-get update && apt-get install -y apt-transport-https# 安装 GPG 证书
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -# 写入软件源;注意:我们用系统代号为 bionic,但目前阿里云不支持,所以沿用 16.04 的 xenial
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOFapt-get updateapt-get install -y kubelet kubeadm kubectl# 指定版本
apt-get install -y kubelet=1.18.8-00 kubeadm=1.18.8-00 kubectl=1.18.8-00# 查看版本kubelet version
kubeadm 在master节点init集群
- kubeadm 初始化整个集群的过程,会生成相关的各种证书、kubeconfig 文件、bootstraptoken 等等
2.注意: 如果使用直接使用kubeadm init,会使用默认配置(如下)
kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
- 因为默认情况下kubeadm会到k8s.gcr.io拉取镜像,不过由于国内存在墙的情况下,上面的地址是访问不到的,就需要自定义镜像地址了,所以在上述 kubeadm.yml文件中修改imageRepository: registry.aliyuncs.com/google_containers
- 修改配置文件后,执行命令 kubeadm init --config kubeadm.yml
- 或者直接传递参数执行也可以,命令如下:
kubeadm init --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16#选择flannel作为 Pod 的网络插件,所以需要指定 --pod-network-cidr=10.244.0.0/16
- kubeadm init 会pull必要的镜像,可能时间会比较长
- init完后,可以看到如下提示:
- 按照提示在 master 节点执行以下命令: (否则会出错)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装Pod Network(在 master 节点安装flannel 网络插件)
- 在 master 节点查看集群情况,可以看到节点的 status 还是 NotReady,这是由于还没有网络插件。
- 由于网络问题,我们选择从github上下载导入flannel对应的docker镜像
wget https://github.com/flannel-io/flannel/releases/download/v0.21.0/flanneld-v0.21.0-amd64.dockerdocker load < flanneld-v0.21.0-amd64.docker
- 等待所有的 pod 都是 running 状态,可以看到所有 node 的 status 是 running 的状态,这时 kubernetes 集群就搭建好了。
将master节点设置为可调度节点
- 由于本次安装只有一个master节点,并没有work节点。所以需要允许pod可调度到master节点;
- 获取node名称:kubectl get nodes
- 去除污点,允许pod调度到master节点:kubectl taint nodes ${node-name} check:NoExecute-
- 查看:kubectl describe nodes pengzai-computer
部署一个简单示例:
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:selector:matchLabels:app: nginxreplicas: 1strategy:type: RollingUpdatetemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
- kubectl create -f nginx-deployment.yaml
- 发布服务,暴露端口:kubectl expose deployment nginx-deployment --port=80 --type=LoadBalancer
- 通过kubectl get services nginx-deployment 查看nodeport,并在宿主机上通过localhost:nodeport访问nginx欢迎页