这两天小编在研究关于运维的一些事情,现在火的不行的docker+k8s。今天踩踩坑。
环境 virtualBox Ubuntu16.04 虚拟机的CPU个数要大于2 内存分配在2G以上
首先我们来安装docker (记得关闭防火墙 )
sudo apt-get remove docker docker-engine docker-ce docker.io
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce
如果你想安装指定版本docker的话可以使用一下命令
apt-cache madison docker-ce 此命令是列出可用的docker版本
sudo apt-get install docker-ce=
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
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 -
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 -
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
如果不关闭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
kubeadm init --apiserver-advertise-address
出现以上提示就是表示成功 了 然后记录下最后一行信息
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
重置之后再重新进行初始化
mkdir -p /root/.kube && \
cp /etc/kubernetes/admin.conf /root/.kube/config
然后执行一下命令
# 查看已加入的节点
kubectl get nodes
# 查看集群状态
kubectl get cs
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 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
至此修改完成,更多信息详见 kubectl logs、exec、port-forward 执行失败问题解决 。
详见 解决k8s无法通过svc访问其他节点pod的问题 。