4. 完整版Ubuntu k8s 集群搭建及采坑记录(k8s 连载)(一)

258 阅读4分钟

这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战

一. 安装virtualBox

    虚拟机需要安装两台. 一个是master, 一个是node. 这两台虚拟机的名字一定不能相同. 因此, master服务器的名字叫做ubantu, node的名字叫ubantu-node

  1. 安装ubantu系统

  2. 设置

    • 设置桥接模式

    • 设置root密码

sudo passwd root

 

   先输入用户密码, 然后在输入root密码

  

    • 设置 root ssh 访问 

网络不通, 重启电脑, 以root用户登录, 密码:123456

ping www.baidu.com 能ping通

设置ssh

复制代码

更新apt-get
apt-get update 
安装ssh
apt-get install ssh
设置ssh
vim /etc/ssh/sshd_config
将PermitRootLogin 的值设置为yes

复制代码

  

 

重启ssh 

 systemctl restart ssh

 

查看ip地址: ip a

在mac的terminal通过ssh连接到服务: ssh root@192.168.1.103, 输入用户密码. 连接成功

    • 关闭防火墙

      ufw disable
      

       

 二. 在虚拟机上安装docker

1. 登录服务器, 查看ip

 

   2. 在mac终端ssh登录

ssh root@192.168.1.103
密码: 123456

  3. 安装docker

apt-get update
apt-get install -y docker.io

  检验docker是否安装成功. 命令行输入docker检查

  4. docker的配置

  • 阿里云加速器配置 : cr.console.aliyun.com/

  • 登录cr.console.aliyun.com/, 并找到镜像加速器, 参考教程,进行配置

     

     

    复制代码

    第一步: 创建文件夹, 有就不用创建了
    sudo mkdir -p /etc/docker
    第二步:添加文件, 并将大括号的内容添加到文件里
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://w52p8twk.mirror.aliyuncs.com"]
    }
    EOF
    
    第三步: 重启docker
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    复制代码

     

三. 在docker上安装mysql 

第一步: 在master节点上, 安装myqsl## 镜像

docker pull mysql:5.6

第二步: 启动mysql容器

docker run -p 3306:3306 --name mymysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d  mysql:5.6
-e MYSQL_ROOT_PASSWORD: -e是用来设置环境变量的. 这里设置的是mysql的root用户的密码
-v : 挂载卷
 

 第三步: 阿里云仓库的登录

1. 创建一个自己的镜像仓库

 

 

 2. 点击管理按钮, 可以查看登录阿里云镜像仓库的操作方法

 

 

四.安装k8s

科学&上网: 安装k8s,需要FQ, 其实一直不明白,啥事科学&上网,原来科学&上网的含义就是FQ. 因为安装k8s的软件, 需要FQ下载一些东西. 

 

前提:

1. 两台主机上都安装了docker

2.  两台主机上都要安装kubeadm, kubelet, 和kubectl

3. 两台主机都要禁用虚拟内存

 

第一步:禁用虚拟内存并永久关闭

swapoff -a && sed -i '/ swap / s/^(.*)$/#\1/g' /etc/fstab

 为什么禁用虚拟内存呢?

原因是kubeadm安装k8s的时候, 它在init的时候回去检测是否有虚拟分区有没有关闭, 如果你开启了虚拟内存,我们的容器, pod就有可能放在虚拟内存中, 这样会大大降低工作效率

 

如果是安装的linux操作系统, 需要关闭SELinux

setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

 

第二步: 安装kubeadm, kubelet, 和kubectl

安装apt-transport-https 和 curl
apt-get update && apt-get install -y apt-transport-https curl

第三步: 如何设置代理

下载k8s的软件, 需要设置代理, 我使用的是v2&ray. 

1. copy 代理参数

 

 然后粘贴出来: export http_proxy="http://127.0.0.1:8001"; export HTTP_PROXY="http://127.0.0.1:8001"; export https_proxy="http://127.0.0.1:8001"; export HTTPS_PROXY="http://127.0.0.1:8001"

2. 查看mac本机的ip

ifconfig | grep 182.168.1

 

 网关是101

3. 给虚拟机设置代理

export http_proxy="http://192.168.1.101:8001"; export HTTP_PROXY="http://192.168.1.101:8001"; export https_proxy="http://192.168.1.101:8001"; export HTTPS_PROXY="http://192.168.1.101:8001"

 

 

4. 检查代理是否设置成功

echo $http_proxy

 

 

第四步: 把官方的下载源, 加入到apt-get中

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - 


cat <<EOF>/etc/apt/sources.list.d/kubernates.list 
deb http://apt.kubernates.io/kubernates-xenial main 
EOF

 

拆解步骤一:

我直接运行 curl -s packages.cloud.google.com/apt/doc/apt… | apt-key add -  报错, 

分两步执行: 

1. 在浏览器输入网址下载 apt-key.gpg :  

curl -O https://packages.cloud.google.com/apt/doc/apt-key.gpg 

2. 将文件导入到虚拟机, 使用apt-key命令加载获取到的文件

sudo apt-key add apt-key.gpg(成功后回显OK)

 

 

 

拆解步骤二: 

将源加到文件当中

cat <<EOF >/etc/apt/sources.list.d/kubernates.list 
deb http://apt.kubernates.io/ kubernates-xenial main 
EOF

实际上是将一行文字放到了Kubernetes.list文件中. 

我们查看一下这个文件

vi /etc/apt/sources.list.d/kubernates.list 

我们看到已经有了

 

 第五步: 下载kubelet kubeadm kubectl

apt-get update && apt-get install -y kubelet kubeadm kebuctl

-------------华丽的分割线--开始------------

在这里重点备注::::::重点:::::重点:::::重点::::::

科学&上网搞死人------整了好多天, 每次都死在这里. 

可以使用国内镜像. 重要的事情说三遍

可以使用国内镜像.

可以使用国内镜像.

可以使用国内镜像.

 参考这篇文章: 

Kubernetes国内镜像、下载安装包和拉取gcr.io镜像: blog.csdn.net/nklinsirui/…

 

复制代码

Kubernets国内镜像
阿里云提供了Kubernetes国内镜像来安装kubelet、kubectl 和 kubeadm。

登陆阿里云镜像网站:https://opsx.alibaba.com/mirror

查找关键字“kubernetes”,点击【帮助】按钮。

————————————————
Debian  /  Ubuntu
swapoff -a && sed -i '/ swap / s/^(.*)$/#\1/g' /etc/fstab
apt-get update && 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  

apt-get update

apt-get install -y kubelet kubeadm kubectl



————————————————
CentOS  / RHEL /  Fedora
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
————————————————

复制代码

 前面五个步骤, 参考这里分割线内部即可

-------------华丽的分割线--结束------------

 

第六步: 禁止组件更新

apt-mark hold kubelet kubeadm kubectl

 

第七步: 初始化master 

 1. 禁用虚拟内存

swapoff -a

2. 初始化kubeadm

kubeadm init --pod-network-cidr=10.244.0.0/16

 

  直接运行会报错, 要求是2cpu,我们是1cpu, 如果想要忽略,需要加上一个参数--ignore-preflight-errors=NumCPU

kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU

执行结果:

  

我们看到,在初始化下载镜像的时候, 有部分组件下载失败了.
我们记录下来这些下载失败的组件

复制代码

error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.18.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.18.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.18.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.18.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.2: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.4.3-0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns:1.6.7: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1

复制代码

然后通过如下方法, 重新下载:

1. 可以从keveon或者mirrorgooglecontainer或者阿里云镜像库中下载, 当其中一个镜像库找不到时, 尝试另一个
2. 在手工设置tag

使用下面三组命令:

docker pull mirrorgooglecontainers/$imageName
docker tag mirrorgooglecontainers/$imageName k8s.gcr.io/$imageName
docker rmi mirrorgooglecontainers/$imageName 

下面我们来一个一个下载

 

1). 下载docker pull mirrorgooglecontainers/kube-apiserver:v1.18.

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2

 

拉取镜像参考文章(说的很详细):  国内拉取google kubernetes镜像blog.csdn.net/networken/a…

我最终使用的是阿里云镜像, 找到镜像详情页面, 可以复制地址

 

 2). 修改下载下来的镜像的tag为k8s.gcr.io的

docker tag  registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2 k8s.gcr.io/kube-apiserver:v1.18.2

 

3). 删除阿里云镜像

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2

 

4) 所有其他的镜像都这么操作, 一共7个

 

复制代码

 # 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-proxy:v1.18.2

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-controller-manager:v1.18.2

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-scheduler:v1.18.2

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/coredns:1.6.7

docker pull registry.cn-hangzhou.aliyuncs.com/dva-1024/etcd:3.4.3-0

-------------------------------------- #修改tag

docker tag  registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-proxy:v1.18.2 k8s.gcr.io/kube-proxy:v1.18.2

docker tag  registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2 k8s.gcr.io/kube-apiserver:v1.18.2

docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-controller-manager:v1.18.2 k8s.gcr.io/kube-controller-manager:v1.18.2

docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-scheduler:v1.18.2 k8s.gcr.io/kube-scheduler:v1.18.2

docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2 k8s.gcr.io/pause:3.2

docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

docker tag registry.cn-hangzhou.aliyuncs.com/dva-1024/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0


---------------------------------- # 删除镜像

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-proxy:v1.18.2

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-controller-manager:v1.18.2

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-apiserver:v1.18.2

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/kube-scheduler:v1.18.2

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/pause:3.2

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/coredns:1.6.7

docker rmi registry.cn-hangzhou.aliyuncs.com/dva-1024/etcd:3.4.3-0

复制代码

 

 

 

 效果如下:

 

 

 3. 重新执行初始化, 并记录最后生成的kubeadm join命令

kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU

记录生成的kubeadm join命令

kubeadm join 192.168.1.109:6443 --token ehtgdn.c7cjv35rqp45it25 \ --discovery-token-ca-cert-hash sha256:2f6192bc28397d1bbd00922538a9588345c37f890e7c8ace5d22585fa1922464

kubeadm join 192.168.1.106:6443 --token vezzap.0w213k8ms11a0v51 \
    --discovery-token-ca-cert-hash sha256:4fcac7c487209d7c354351ba6f93110253df4d0440fc68cb23fc4ac0baed4e0c