install kubernetes on ubantu 18.04
install kubernetes on ubantu 18.04
- 安装前提:需要提前安装 docker(可自行百度)
- 本次安装中,我们主要是通过国内的源(阿里源)来下载 kubernetes
#关闭 swap 分区
sudo swapoff -a
#配置阿里源
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF
#可能需要添加密钥 后八位
gpg --keyserver keyserver.ubuntu.com --recv-keys 836F4BEB
gpg --export --armor 836F4BEB | sudo apt-key add -
#安装 kubelet kubeadm kubectl
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
#查看相应的镜像版本
kubeadm config images list
#根据上面返回的版本来改名 从而实现从国内拉取镜像(以下操作可以使用shell脚本完成)
#获取kube-apiserver:v1.20.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.20.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.20.1 k8s.gcr.io/kube-apiserver:v1.20.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.20.1
#获取kube-controller-manager:v1.20.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.20.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.20.1 k8s.gcr.io/kube-controller-manager:v1.20.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.20.1
#获取kube-scheduler:v1.20.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.20.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.20.1 k8s.gcr.io/kube-scheduler:v1.20.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.20.1
#获取kube-proxy:v1.20.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.20.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.20.1 k8s.gcr.io/kube-proxy:v1.20.1
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.20.1
#获取pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
#获取etcd:3.4.13-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.13-0
#获取coredns:1.7.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0
#初始化
kubeadm init
截至到走一步,可能会遇到的问题(我遇到的问题):
困难一:遇到了端口被占用的情况
解决方法:
-
可尝试重置kubeadm 工具箱
kubeadm reset
-
如果重置还是没用的话,可以尝试 kill 占用端口的进程,然后再重置
#查看端口使用情况 netstat -lnp | grep 1025 #根据被占用端口号,删除占用该端口的进程 kill <进程号>
困难二:镜像拉取失败
解决方法:
- 再运行一遍上面说的脚本,你可以使用
docker image list
查看镜像是否拉取成功
困难三:k8s 集群初始化失败
解决方法:
这个问题的解决方法不是特别有用,我根据参考他人的教程总结了几个尝试方法
- 重置 kubeadm,由于 reset命令无法对记录的清理不是很全面,你可以进入
var/lib/etcd
中,把里面的文件全删了,并且清空一下 iptablesiptables [-t tables] [-FXZ]
- 或者你可以选择重启电脑,可能能够碰玄学,然后错误就消失了
- 如果上述方法都没用,可以尝试重新搞个系统,然后按照上面的步骤做,一般错误会消失(我就是这么干的)
- 没有什么是重启、重装解决不了的问题,如果有那一定是买过
如果初始化成功,你会看见如下图所示。说明你离成功很近了。
接下来就是根据提示的,保存配置信息
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
接下来就是下载网络插件,由于其插件较多,所以具体可参考 https://kubernetes.feisky.xyz/extension/network/cni
接下来主要介绍 CNI bridge、flannel、weave三个插件的配置。
CNI bridge
配置 CNI brige 插件
mkdir -p /etc/cni/net.d
cat >/etc/cni/net.d/10-mynet.conf <<-EOF
{
"cniVersion": "0.3.0",
"name": "mynet",
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"subnet": "10.244.0.0/16",
"routes": [
{"dst": "0.0.0.0/0"}
]
}
}
EOF
cat >/etc/cni/net.d/99-loopback.conf <<-EOF
{
"cniVersion": "0.3.0",
"type": "loopback"
}
EOF
flannel
在初始化时将命令改为
kubeadm init --pod-network-cidr=10.244.0.0/16
之后根据提示,保存配置文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#如果你在root权限下,可直接使用
export KUBECONFIG=/etc/kubernetes/admin.conf
再通过 kubectl 将配置应用于资源
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
#如果上面的命令会报错,可以尝试使用下面的命令
kubectl apply -f kube-flannel.yml
可通过docker images|grep flannel
来查看 flannel 是否被拉取成功
可通过kubectl get pods --all-namespaces
来查看是否配置成功
可能遇到的错误:
一、证书错误
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
解决方法
-
设置为默认的
KUBECONFIG
位置export KUBECONFIG=/etc/kubernetes/admin.conf
-
是覆盖
kubeconfig
的现有用户 "管理员"mv $HOME/.kube $HOME/.kube.bak mkdir $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/con fig
二、flannel 访问失败
The connection to the server raw.githubusercontent.com was refused - did you specify the right host or port?
解决方法
主要是因为外网不可以被访问,只需要在hosts下添加相应的ip即可
#通过https://www.ipaddress.com/查询raw.githubusercontent.com的真实IP。
sudo vim /etc/hosts
ipaddress raw.githubusercontent.com
weave
Weave Net是一个多主机容器网络方案,支持去中心化的控制平面,各个host上的wRouter间通过建立Full Mesh的TCP链接,并通过Gossip来同步控制信息。
优点:
-
去中心化
-
故障自动恢复
-
加密通信
-
Multicast networking
缺点:
- UDP模式性能损失较大
官方介绍:https://kubernetes.feisky.xyz/extension/network/weave
kubectl apply -n kube-system -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
同样在配置完成后,可通过kubectl get pods --all-namespaces
或kubectl get pods -n kube-system
来查看是否成功。
总结:
在本次配置 k8s 的过程中,遇到许多问题,应该来说踩的坑还是比较全的。其难度主要也体现在报多少错,如果报错少的话,过程还是比较简单的。但如果报错多的话,过程可能比较痛苦。
多参考 k8s 的官方文档,对于官方文档的阅读也仅仅是停留在 k8s 的配置安装上,对于其强大的功能还未认真的阅读,接下来的目标的话,逐步的了解其功能,以及 k8s 对于容器管理方面的知识以及实践。
部分 kubectl 命令:
#查看 kube-flannel 状态
kubectl get pods --all-namespaces
#查看 k8s node 信息
kubectl get nodes
#通过文件名或标准输入来配置应用于资源
kubectl apply -f xxxx.yaml
kubectl create -f xxxx.yaml
kubectl delete -f xxxxx.yaml
#重置整个 k8s 集群,master node节点相同操作
kubectl reset
部分参考网站:
1.kubernetes 官网: https://kubernetes.io/
2.官方对于 kubernetes 配置过程中的一些问题排查:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/
3.知乎大佬配置教程:https://zhuanlan.zhihu.com/p/46341911