这两天小编在研究关于运维的一些事情,现在火的不行的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
第五步 安装指定版本
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版本
然后执行脚本
由于有些镜像在国内无法自动下载,所以我们可以提前从阿里云下载,或者在初始化的时候指定下载源
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
出现以上提示就是表示成功 了 然后记录下最后一行信息
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 管理节点部署完成。
好的。到这里位置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