这两天小编在研究关于运维的一些事情,现在火的不行的docker+k8s。今天踩踩坑。

环境 virtualBox Ubuntu16.04 虚拟机的CPU个数要大于2 内存分配在2G以上

首先我们来安装docker (记得关闭防火墙 )

第一步 卸载旧版本docker (新机器就不需要执行了)

sudo apt-get remove docker docker-engine docker-ce docker.io

第二步 更新apt

sudo apt-get update

第三步 安装以下包以使apt可以通过HTTPS使用存储库

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

第四步 添加Docker官方的GPG密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

第五步 使用下面的命令来设置stable存储库

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

第六步 更新一下apt

sudo apt-get update

第七步  安装最新版本的docker

sudo apt-get install -y docker-ce 

如果你想安装指定版本docker的话可以使用一下命令

apt-cache madison docker-ce  此命令是列出可用的docker版本

sudo apt-get install docker-ce=<VERSION> 此命令可以安装对应版本的docker

第八步 验证docker状态

systemctl status docker

第九步 可以根据需要是否要开机启动 

systemcd enable docker

systemcd start docker

第十步 使用阿里云镜像 加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["你的阿里云镜像加速器地址"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

 

接下来 我们来安装k8s

第一步 安装crul 和跟新apt

sudo apt-get update && sudo apt-get install -y apt-transport-https curl

第二步 添加阿里云秘钥

sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

第三步 使用阿里云源 并且跟新apt

sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF

sudo apt update

此时可能会报错 原因是缺少相应的key,可以通过下面的命令添加(E084DAB9 为上面报错的key后8位)

gpg --keyserver keyserver.ubuntu.com --recv-keys E084DAB9

gpg --export --armor E084DAB9 | sudo apt-key add -

第四步 列出当前kube版本

apt-cache madison kubeadm

k8s如何调用docker k8s docker_ubuntu

第五步 安装指定版本

sudo apt-get install -y kubelet=1.14.3-00 kubeadm=1.14.3-00 kubectl=1.14.3-00

sudo apt-mark hold kubelet=1.14.3-00 kubeadm=1.14.3-00 kubectl=1.14.3-00

第六步 关闭swap

如果不关闭kubernetes运行会出现错误, 即使安装成功了,node重启后也会出现kubernetes server运行错误。

#暂时关闭, sudo swapoff -a

# 永久关闭 sudo vim /etc/fstab 注释掉swap那一行就行

虚拟机最好把内存分配调整到2G以上,否则关掉swap会导致图形界面难以进入。

第七步

由于Google被墙了 在初始化kubeadm的时候导致下载镜像失败,小编我采用了先下载对应的国内镜像的版本,或者也可以在初始化的时候指定仓库的地址 在kubeadm init 后面加上--image-repository 指定,这里我们采用提前下载

第八步

执行kubeadm config images list  查看对应的api版本

k8s如何调用docker k8s docker_服务器_02

然后执行脚本

由于有些镜像在国内无法自动下载,所以我们可以提前从阿里云下载,或者在初始化的时候指定下载源

images=(
kube-apiserver:v1.14.10
kube-controller-manager:v1.14.10
kube-scheduler:v1.14.10
kube-proxy:v1.14.10
coredns:1.3.1
pause:3.1
etcd:3.3.10
)
for imageName in ${images[@]} ; do
       docker pull registry.aliyuncs.com/google_containers/$imageName
        docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
        docker rmi registry.aliyuncs.com/google_containers/$imageName
done

第九步 初始化master节点

kubeadm init --apiserver-advertise-address <master节点ip> --pod-network-cidr=10.244.0.0/16

k8s如何调用docker k8s docker_k8s如何调用docker_03

出现以上提示就是表示成功 了 然后记录下最后一行信息

kubeadm join 192.168.0.205:6443 --token tj8y8n.kvpbrjyjnme7wsyp \
    --discovery-token-ca-cert-hash sha256:b4d80843b1d312259ece7c9c3076001ac72574f55566ab3d248e3c538620b9fb 

这个 kubeadm join 命令,就是用来给这个 Master 节点添加更多工作节点(Worker)的命令。我们在后面部署 Worker 节点的时候马上会用到它,所以找一个地方把这条命令记录下来,如果你不慎遗失了该命令,可以在master节点上使用kubeadm token create --print-join-command命令来重新生成一条。如果在初始化过程中出现了任何Error导致初始化终止了,使用kubeadm reset重置之后再重新进行初始化

第十步 配置 kubectl 工具

mkdir -p /root/.kube && \
cp /etc/kubernetes/admin.conf /root/.kube/config

然后执行一下命令

# 查看已加入的节点
kubectl get nodes
# 查看集群状态
kubectl get cs

第十一步   部署 flannel 网络

flannel是什么?它是一个专门为 k8s 设置的网络规划服务,可以让集群中的不同节点主机创建的 docker 容器都具有全集群唯一的虚拟IP地址。想要部署flannel的话直接执行下述命令即可

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

出现以下信息 配置成功 

k8s如何调用docker k8s docker_docker_04

至此,k8s 管理节点部署完成。

好的。到这里位置k8s+docker 安装完成了,下面延伸一点 将其他节点加入到master节点中,其他节点也需要安装以上的docker和k8s 修改服务器的基本配置 然后在执行你在master节点保存到额join命令

kubeadm join 192.168.0.111:6443 --token oyzaz0.q7ujo2tgiesaxy25 \
    --discovery-token-ca-cert-hash sha256:b8d3308ef13f07afcd992c57c2c7899f1cdb67ffa5cbf469c93583204bcacb6c

出现以下信息 那你就ok了

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the master to see this node join the cluster.

登录master节点 使用一下命令 就可以看到了节点信息了

root@master1:~# kubectl get nodes
NAME      STATUS   ROLES    AGE    VERSION
master1   Ready    master   145m   v1.15.0
worker1   Ready    <none>   87m    v1.15.0

 解决默认网卡问题修复

如果你是使用virtualBox部署的虚拟机,并且虚拟机直接无法使用网卡1的 ip 地址互相访问的话(例如组建双网卡,网卡1为 NAT 地址转换用来上网,网卡2为Host-only,用于虚拟机之间访问)。就需要执行本节的内容来修改 k8s 的默认网卡。不然会出现一些命令无法使用的问题。如果你的默认网卡可以进行虚拟机之间的相互访问,则没有该问题。

一 修改 kubelet 默认地址

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

添加如下信息 

Environment="KUBELET_EXTRA_ARGS=--node-ip=192.168.56.21"

重启kubelet

systemctl stop kubelet.service && \
systemctl daemon-reload && \
systemctl start kubelet.service