Ubuntu通过kubeadm安装k8s
Ubuntu通过kubeadm安装k8s
·
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 update
sudo 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
EOF
apt-get update
apt-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镜像。https://github.com/flannel-io/flannel
- 在github上选择和kube-flannel.yml对应版本的docker-image下载、导入。
- kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
- 根据下载下来的image更改以下kube-flannel.yml的image命名
wget https://github.com/flannel-io/flannel/releases/download/v0.21.0/flanneld-v0.21.0-amd64.docker
docker load < flanneld-v0.21.0-amd64.docker
kubectl apply -f kube-flannel.yml
- 等待所有的 pod 都是 running 状态,可以看到所有 node 的 status 是 running 的状态,这时 kubernetes 集群就搭建好了。
将master节点设置为可调度节点
- 由于本次安装只有一个master节点,并没有work节点。所以需要允许pod可调度到master节点;
- 获取node名称:kubectl get nodes
- 查看当前master节点的污点设置项:
kubectl describe nodes pengzai-book | grep Taints
#显示如下:
Taints: node-role.kubernetes.io/master:NoSchedule
- 去除污点:(最后带个减号-)
kubectl taint nodes pengzai-book node-role.kubernetes.io/master:NoSchedule-
- 再次查看当前master节点的污点设置项:
kubectl describe nodes pengzai-book | grep Taints
#显示如下:
Taints: <none>
部署一个简单示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- 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欢迎页
更多推荐
已为社区贡献1条内容
所有评论(0)