解决什么问题
官网给出了安装k8s的详细教程,当然如果被访问的资源网络可以直达的话,事情会很简单。
杭州马说过一句和对钱没兴趣一样的话:人生哪能多如意。我信你个鬼,因为阿里云是有家底的。
一亩三分地
- Ubuntu18.04 PC
- 国内网络
安装步骤
1、网络准备
- 加载br_netfilter组件
#查看:
lsmod | grep br_nerfilter
#加载:
sudo modprobe br_nerfilter
- 使能iptables检测网桥
cat <
2、安装kubeadm,kubelet,kubectl
- 添加源
官方文档给的Kubernets源需要外网才可以访问。所以这里要求助于马员外,添加阿里的k8s源。安装的时候,k8s的版本只更新到xenial,但令人欣慰是该版本同样可以支持Ubuntu18.04,Ubuntu20.04。
cat < /etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
EOF
- 添加gpg key
添加源之后,执行 apt-get update报错。原因是没有公钥,无法验证签名。添加操作可以执行下面的命令,命令中的BA07F4FB为报错信息中提示的缺失公钥的后8位。
gpg --keyserver keyserver.ubuntu.com --recv-keys BA07F4FB
gpg --export --armor E084DAB9 | sudo apt-key add -
- 安装厨房三件套
sudo apt-get install -y kubectl kubeadm kubectl
至此,安装完毕。
禁用swap
部署Kubernets需要先禁用swap。继续了解可以查看相关讨论。
sudo swapoff -a
以上动作是临时禁用,架不住重启。永久禁用可以修改/etc/fstab文件,将/swapfile开头的那行注释。
创建集群
1、镜像准备
因为官方镜像地址在墙的那头,所以我们厚着脸皮再次找到了一位不愿意透露姓氏的马姓先生,偷偷摸摸pull:
kubeadm config images pull --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
sudo kubeadm init --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
2、集群初始化
sudo kubeadm init
配置授权信息
主要是为了保存相关的配置信息在用户目录下,这样不用每次都输入相关的认证信息。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
这个配置完成后,kubectl就可以用了。
配置网络插件
上面安装成功后如果通过(kubectl --namespace=kube-system get pods)查询kube-system下Pod的运行情况,其中网络相关的Pod都处于Pending的状态,这是因为缺少相关的网络插件,而网络插件有很多个(以下任选一个),可以选择自己需要的,一般本地选择calico即可。在网络插件配置之前,coredns是无法正常启动的。
kubectl apply -f https://docs.projectcalico.org/v3.16/manifests/calico.yaml
查看calico已发布的版本:Calico Releases。这里安装的版本是v1.19.0,所以选择的calico版本是v3.16。该插件的官方安装指南是:Quickstart For Calico Install。
我们需要一个状态来给我们信心,告诉我们master集群已经就绪,就等着我来玷污它。
$ kubectl --namespace=kube-system get pods
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7d569d95-7pqfj 1/1 Running 1 7d2h
calico-node-dpz6l 1/1 Running 1 7d2h
coredns-6c76c8bb89-4hg7x 1/1 Running 1 7d6h
coredns-6c76c8bb89-7w864 1/1 Running 1 7d6h
etcd-eve 1/1 Running 1 7d6h
kube-apiserver-eve 1/1 Running 1 7d6h
kube-controller-manager-eve 1/1 Running 1 7d6h
kube-proxy-f94bl 1/1 Running 1 7d6h
kube-scheduler-eve 1/1 Running 1 7d6h
使用master,单点就是master。
因为master默认是不允许调度的,但是在单点场景下node只有一个,这就需要master去履行worker的职责去运行pod。所以在这里,我们只能很难为情得玷污了它的纯洁(taint)。
kubectl taint nodes --all node-role.kubernetes.io/master-
至此。
see also:
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
https://zhuanlan.zhihu.com/p/46341911