Ubuntu通过kubeadm安装k8s

kubeadm

kubeadm是一个构建k8s集群的工具。它提供的kubeadm init和 kubeadm join 两个命令是快速构建k8s集群的最佳实践。 其次,kubeadm工具只为构建最小可用集群,它只关心集群中最基础的组件,至于其他的插件(比如dashboard、CNI等)则不会涉及。

安装参考文档

  1. https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

环境准备

  1. 以ubuntu系统为例,Ubuntu20
  2. Kubernetes v1.8+ 要求关闭系统 Swap,请在所有节点利用以下指令关闭 (否则kubelet会出错!)
  3. 安装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集群

  1. kubeadm 初始化整个集群的过程,会生成相关的各种证书、kubeconfig 文件、bootstraptoken 等等
    2.注意: 如果使用直接使用kubeadm init,会使用默认配置(如下)
kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
  1. 因为默认情况下kubeadm会到k8s.gcr.io拉取镜像,不过由于国内存在墙的情况下,上面的地址是访问不到的,就需要自定义镜像地址了,所以在上述 kubeadm.yml文件中修改imageRepository: registry.aliyuncs.com/google_containers
  2. 修改配置文件后,执行命令 kubeadm init --config kubeadm.yml
  3. 或者直接传递参数执行也可以,命令如下:
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
  1. kubeadm init 会pull必要的镜像,可能时间会比较长
  2. init完后,可以看到如下提示:
    在这里插入图片描述
  3. 按照提示在 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 网络插件)

  1. 在 master 节点查看集群情况,可以看到节点的 status 还是 NotReady,这是由于还没有网络插件。
  2. 由于网络问题,我们选择从github上下载导入flannel对应的docker镜像。https://github.com/flannel-io/flannel
  3. 在github上选择和kube-flannel.yml对应版本的docker-image下载、导入。
  4. kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
  5. 根据下载下来的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
  1. 等待所有的 pod 都是 running 状态,可以看到所有 node 的 status 是 running 的状态,这时 kubernetes 集群就搭建好了。

将master节点设置为可调度节点

  1. 由于本次安装只有一个master节点,并没有work节点。所以需要允许pod可调度到master节点;
  2. 获取node名称:kubectl get nodes
  3. 查看当前master节点的污点设置项:
kubectl describe nodes pengzai-book | grep Taints
#显示如下:
Taints:             node-role.kubernetes.io/master:NoSchedule
  1. 去除污点:(最后带个减号-)
kubectl taint nodes pengzai-book node-role.kubernetes.io/master:NoSchedule-
  1. 再次查看当前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
  1. kubectl create -f nginx-deployment.yaml
  2. 发布服务,暴露端口:kubectl expose deployment nginx-deployment --port=80 --type=LoadBalancer
  3. 通过kubectl get services nginx-deployment 查看nodeport,并在宿主机上通过localhost:nodeport访问nginx欢迎页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值