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中,把里面的文件全删了,并且清空一下 iptables iptables [-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-namespaceskubectl get pods -n kube-system来查看是否成功。

总结:

​ 在本次配置 k8s 的过程中,遇到许多问题,应该来说踩的坑还是比较全的。其难度主要也体现在报多少错,如果报错少的话,过程还是比较简单的。但如果报错多的话,过程可能比较痛苦。

​ 多参考 k8s 的官方文档,对于官方文档的阅读也仅仅是停留在 k8s 的配置安装上,对于其强大的功能还未认真的阅读,接下来的目标的话,逐步的了解其功能,以及 k8s 对于容器管理方面的知识以及实践。

部分 kubectl 命令:

详情可查看:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#-strong-getting-started-strong-

#查看 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

posted @ 2020-12-30 22:38  HL1123  阅读(218)  评论(1编辑  收藏  举报