1. 关闭swap并关闭防火墙

首先,我们需要先关闭swap和防火墙,否则在安装Kubernetes时会导致不成功:

# 临时关闭
swapoff -a # 编辑/etc/fstab,注释掉包含swap的那一行即可,重启后可永久关闭 ufw disable

2.配置阿里源

sudo echo "deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list

然后更新下:

sudo apt update

如果遇到以下问题:



可以记下提示的PUBKEY的最后8位,这里是BA07F4FB,然后执行:

gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB
gpg --export --armor BA07F4FB | sudo apt-key add -
sudo apt-get update

3. 安装组件

sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl #确保不会被自动更新

4. 配置kubelet的cgroup drive

需要确保kubelet的cgroup drive在docker的一致。

分别可以通过以下命令查看:

docker info | grep -i cgroup

cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

若显示不一样,则添加或修改Environment="KUBELET_CGROUP_ARGS=--cgroup-dirver=cgroupfs"

systemctl daemon-reload
systemctl restart kubelet

5. 启动kubelet

systemctl enable kubelet && systemctl start kubelet

6. 下载K8S的Docker镜像

/etc/apt/sources.list中添加阿里源:


deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe

sudo apt update更新下源。

首先使用kubeadm config images list显示我们需要下载的镜像。

uploading-image-472461.png

然后从mirrorgooglecontainers上把这些镜像都拉下来,以免在初始化的时候从k8s.gcr.io拉取:

docker pull mirrorgooglecontainers/kube-apiserver:v1.14.2
docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.2
docker pull mirrorgooglecontainers/kube-scheduler:v1.14.2
docker pull mirrorgooglecontainers/kube-proxy:v1.14.2
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1

具体版本请自行修改。

然后修改tag成k8s执行init检查的镜像:


docker tag mirrorgooglecontainers/kube-apiserver:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2
docker tag mirrorgooglecontainers/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2
docker tag mirrorgooglecontainers/kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2
docker tag mirrorgooglecontainers/kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

注意,至此基础的组件都安装完成,接下来要根据是master节点还是普通node节点来分别配置。

7. master节点配置

在master节点上运行:

kubeadm init --pod-network-cidr=10.0.0.0/24 --kubernetes-version=v1.14.2 --apiserver-advertise-address=10.0.2.15

注意:

pod-network-cidr: 选项--pod-network-cidr=10.0.0.0/24表示集群将使用网络的子网范围;

选项--kubernetes-version=v1.14.2指定K8S版本,必须和前面导入的镜像一致。

选项--apiserver-advertise-address表示绑定的网卡IP,这里是指定所用网络的网卡。

若执行kubeadm init出错或强制终止,则再需要执行该命令时,需要先执行kubeadm reset重置。

执行成功后,它提示还需要执行:

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

此外最后还会提示其他节点加入集群时的命令:

kubeadm join 10.0.2.15:6443 --token zuhiop.bmxq2jofv1j68o9o \
--discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb

不过需要注意的是这里的token值24小时后会失效,因此,当以后还想加入节点时,可以先用kubeadm token list命令查看当前的token表,并在master节点上执行openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'来查看hash。

此时我们查看网络状态kubectl get pod -n kube-system,可以发现都处于Pending阻塞状态,此时,我们需要配置网络,直接使用Calico,即执行:

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

(注意这里也是有版本号的,如果不是很清楚是多少,可以直接访问官网获取最新的进行尝试:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)

过段时间,再执行kubectl get pod -n kube-system就会发现都处于running状态了。

最后将master设为工作节点:

kubectl taint nodes --all node-role.kubernetes.io/master-

执行成功时会显示

node/xl-virtualbox untainted

对于mater至此配置成功,可以使用kubectl get nodes命令查看节点状态。当然目前只有一个master节点。

8.普通工作节点

对于普通的node节点,只需执行:

kubeadm join 10.0.2.15:6443 --token zuhiop.bmxq2jofv1j68o9o \
--discovery-token-ca-cert-hash sha256:b65ca09d1f18ef0af3ded2c831c609dfe48b19c5dc53a8398af5b735603828fb

就可以了。

如果此时在master节点上使用kubectl get nodes查看节点的状态时'NotReady',请在对应主机上重启docker服务即可:

 systemctl restart docker

最后,可以看到两个节点都能正常工作了:

PS:

为了每台节点显示名称不一样,最好是给每个节点设置不同的hostname,可以通过以下命令修改:

hostnamectl set-hostname new-name

Ubuntu下搭建Kubernetes集群(3)--k8s部署的更多相关文章

  1. Ubuntu下搭建Kubernetes集群(4)--部署K8S Dashboard

    K8S Dashboard是官方的一个基于WEB的用户界面,专门用来管理K8S集群,并可展示集群的状态.K8S集群安装好后默认没有包含Dashboard,我们需要额外创建它. 首先我们执行命令: wg ...

  2. Ubuntu下搭建Kubernetes集群(2)--docker基本操作

    查看当前的容器和images docker ps -a docker images 1.创建新的容器 docker run -it --name 容器名 镜像名 /bin/bash # 挂载目录和端口 ...

  3. Ubuntu下搭建Kubernetes集群(1)--安装docker

    可以使用物理机,也可以使用虚拟机. 首先参考https://docs.docker.com/install/linux/docker-ce/ubuntu/ 官方文档学会安装docker. 1.首先移除 ...

  4. Ubuntu 16.04下搭建kubernetes集群环境

    简介 目前Kubernetes为Ubuntu提供的kube-up脚本,不支持15.10以及16.04这两个使用systemd作为init系统的版本. 这里详细介绍一下如何以非Docker方式在Ubun ...

  5. kubeadm搭建kubernetes集群之三:加入node节点

    在上一章<kubeadm搭建kubernetes集群之二:创建master节点>的实战中,我们把kubernetes的master节点搭建好了,本章我们将加入node节点,使得整个环境可以 ...

  6. kubeadm搭建kubernetes集群之二:创建master节点

    在上一章kubeadm搭建kubernetes集群之一:构建标准化镜像中我们用VMware安装了一个CentOS7虚拟机,并且打算用这个虚拟机的镜像文件作为后续整个kubernetes的标准化镜像,现 ...

  7. kubeadm 搭建kubernetes集群环境

    需求 kubeadm 搭建kubernetes集群环境 准备条件 三台VPS(本文使用阿里云香港 - centos7.7) 一台能SSH连接到VPS的本地电脑 (推荐连接工具xshell) 安装步骤 ...

  8. Linux下搭建tomcat集群全记录(转)

    本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...

  9. Windows下搭建Redis集群

    Redis集群: 如果部署到多台电脑,就跟普通的集群一样:因为Redis是单线程处理的,多核CPU也只能使用一个核, 所以部署在同一台电脑上,通过运行多个Redis实例组成集群,然后能提高CPU的利用 ...

随机推荐

  1. ORM对象关系映射:

    django配置orm: django使用mysql数据库: 首先cmd创建库 settings配置mysql数据库: DATABASES = { 'default': { 'ENGINE': 'dj ...

  2. 剑指Offer-24.二叉树中和为某一值的路径(C++/Java)

    题目: 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的 ...

  3. 教你用好 Javascript 数组

    原文链接:https://juejin.im/post/5d9769b26fb9a04df26c1b89 作为 Javascript 的标准对象之一,数组是非常底层而且实用的数据结构.虽然结构很简单, ...

  4. Vue v-for操作与computed结合功能

    <!doctype html> <html lang="en"> <head id="head"> <meta cha ...

  5. Spring Cloud和Spring Boot的版本问题

    很多人在使用springboot和springcloud,但是对于这两者之间的版本关系不是很清楚,特别是在面临升级的时候不知道该如何操作.本文简要摘录的官方文档的部分内容作为依据,供广大同行参考. 问 ...

  6. Centos7编译安装Nginx+keepalived

    一.安装环境.主机信息及软件版本 Nginx:1.12.2keepalived:2.0.12时间同步(同步后确认各服务器时间是否一致,不一致需要修改一下时区) 关闭防火墙 二.编译安装Nginx 1. ...

  7. Python 学习 第17篇:从SQL Server数据库读写数据

    在Python语言中,从SQL Server数据库读写数据,通常情况下,都是使用sqlalchemy 包和 pymssql 包的组合,这是因为大多数数据处理程序都需要用到DataFrame对象,它内置 ...

  8. 配置IIS网站可以下载.apk/.ipa文件

    添加 扩展名是:.apk MIMI类型是:application/vnd.android.package-archive 扩展名是:.ipa MIMI类型是:application/iphone

  9. 运算符 &(与运算)、|(或运算)、^(异或运算)

    按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算. 运算规则:0&0=0;  0&1=0;   1&0=0;    1&1=1; 按位或运算符( ...

  10. vue--购物车案例(小知识点总结)

    Html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...