Kubernetes for arm 1.18.0快速安装

原创
2020/04/09 14:59
阅读数 6.8K

Kubernetes 1.18.0已经正式发布,对于高可用集群可以直接升级,而且支持arm版。快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。参考《Ubuntu上软件锁定版本不更新》安装特定DockerCE版本。

实验环境为:树莓派4B + Ubuntu 19.10.1(arm64) + Docker 19.03.6 + K8s 1.18.0(官方版),也可以使用分发版MicroK8s和K3s。

1、安装、升级kubeadm/kubectl/kubelet版本

步骤如下:

1.1 安装docker

安装Docker 如下:

$ curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

1.2 设置docker服务

sudo systemctl enable docker.service

确保kubelet使用的cgroup driver 与 Docker的一致。要么使用下面的方法更新 Docker:

cat << EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

⚠️注意:一定要在kubeadm init运行之前设置,否则在运行init之后再来设置的会导致kubelet启动失败。

然后重启Docker服务,运行:

sudo systemctl daemon-reload
sudo systemctl restart docker

1.3 安装 kubeadm, kubelet and kubectl

# root(sudo -i)
apt-get update && apt-get install -y apt-transport-https
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl

1.4 查看k8s镜像版本

查看该版本的容器镜像版本:

kubeadm config images list

输出如下:

~# kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.18.0
k8s.gcr.io/kube-controller-manager:v1.18.0
k8s.gcr.io/kube-scheduler:v1.18.0
k8s.gcr.io/kube-proxy:v1.18.0
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

2、拉取容器镜像

原始的kubernetes镜像文件在gcr上,不能直接下载。我这里使用hub.docker.com的仓库,拉取还是比较快的。

echo ""
echo "=========================================================="
echo "Pull Kubernetes for arm v1.18.0 Images from docker.io ......"
echo "=========================================================="
echo ""

MY_REGISTRY=mirrorgcrio

## 拉取镜像
docker pull ${MY_REGISTRY}/kube-apiserver-arm64:v1.18.0
docker pull ${MY_REGISTRY}/kube-controller-manager-arm64:v1.18.0
docker pull ${MY_REGISTRY}/kube-scheduler-arm64:v1.18.0
docker pull ${MY_REGISTRY}/kube-proxy-arm64:v1.18.0
docker pull ${MY_REGISTRY}/etcd-arm64:3.4.3-0
docker pull ${MY_REGISTRY}/pause-arm64:3.2

# 注意,coredns的仓库可以直接使用官方的:
docker pull coredns/coredns:1.6.7

## 添加Tag
docker tag ${MY_REGISTRY}/kube-apiserver-arm64:v1.18.0 k8s.gcr.io/kube-apiserver:v1.18.0
docker tag ${MY_REGISTRY}/kube-scheduler-arm64:v1.18.0 k8s.gcr.io/kube-scheduler:v1.18.0
docker tag ${MY_REGISTRY}/kube-controller-manager-arm64:v1.18.0 k8s.gcr.io/kube-controller-manager:v1.18.0
docker tag ${MY_REGISTRY}/kube-proxy-arm64:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0
docker tag ${MY_REGISTRY}/etcd-arm64:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag ${MY_REGISTRY}/pause-arm64:3.2 k8s.gcr.io/pause:3.2

#codredns也要改tag:
docker tag coredns/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

echo ""
echo "=========================================================="
echo "Pull Kubernetes for arm v1.18.0 Images FINISHED."
echo "into docker.io/mirrorgcrio, "
echo " by openthings@https://my.oschina.net/u/2306127."
echo "=========================================================="

echo ""

保存为shell脚本,然后执行。

3、安装和升级Kubernetes集群

运行 K8s 在部分 ARM硬件上可能有些困难,因为 cgroups (必须的!) 缺省未启用(参考《MicroK8s-部署到Windows、macOS和Raspberry Pi》)。可以通过编辑 Rasberry Pi 的boot参数来修改:

sudo vi /boot/firmware/nobtcmd.txt

注意:旧的Raspberry Pi 的 boot 参数在 /boot/firmware/cmdline.txt

添加下面的参数到最前面,保存文件:

cgroup_enable=memory cgroup_memory=1

然后需要重启,运行 sudo reboot now。

  • 端口占用查看:
netstat -lnp | grep 1025

然后继续Kubernetes的安装过程。

3.1 全新安装

全新安装(单master节点):

#指定IP地址,1.18.0版本:
sudo kubeadm init --kubernetes-version=v1.18.0 --apiserver-advertise-address=10.1.1.199 --pod-network-cidr=10.244.0.0/16

3.2 高可用(HA)安装

创建高可用集群(多master节点):

sudo kubeadm init --kubernetes-version=v1.18.0 \
--apiserver-advertise-address=192.168.199.173 \
--control-plane-endpoint=192.168.199.173:6443 \
--pod-network-cidr=10.244.0.0/16 \
--upload-certs

3.3 安装网络

这时,运行kubectl get node可能为NotReady,需要安装网络组件,如下:

#安装网络
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

3.4 启用调度

启用master调度:

#启用主控机同时作为工作节点
kubectl taint nodes --all node-role.kubernetes.io/master-

3.5 升级版本

先查看一下需要升级的各个组件的版本。

使用kubeadm upgrade plan ,输出的版本升级信息如下:

Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT   CURRENT       AVAILABLE
Kubelet     1 x v1.17.2   v1.18.0
            8 x v1.17.2   v1.18.0

Upgrade to the latest version in the v1.18 series:

COMPONENT            CURRENT   AVAILABLE
API Server           v1.17.2   v1.18.0
Controller Manager   v1.17.2   v1.18.0
Scheduler            v1.17.2   v1.18.0
Kube Proxy           v1.17.2   v1.18.0
CoreDNS              1.6.5     1.6.7
Etcd                 3.4.3     3.4.3-0

You can now apply the upgrade by executing the following command:

    kubeadm upgrade apply v1.18.0

确保上面的容器镜像已经下载(如果没有提前下载,可能被网络阻隔导致挂起),然后执行升级:

kubeadm upgrade apply v1.18.0

看到下面信息,就OK了。

[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.18.0". Enjoy!

3.6 配置环境

然后,配置当前用户环境:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

就可以使用 kubectl version 来查看状态和 kubectl cluster-info 查看服务地址。

4、工作节点的安装和升级

每个工作节点需要拉取上面对应版本的镜像,以及安装kubelet的对应版本。

然后,安装master节点的输出提示运行kubeadm join即可。譬如:

You can now join any number of the control-plane node running the following command on each as root:

  kubeadm join 192.168.199.169:6443 --token 9ijpe2.qu7bdyza78cutg82 \
    --discovery-token-ca-cert-hash sha256:b6f6d72437d15037380663ce6ebc8fe321e215f3e77936157eee1a6cfc9c22e0 \
    --control-plane --certificate-key 68979e69dab8bcc889e1caf98713929c822f9434162f54d19b5295969aa5772c

Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.199.169:6443 --token 9ijpe2.qu7bdyza78cutg82 \
    --discovery-token-ca-cert-hash sha256:b6f6d72437d15037380663ce6ebc8fe321e215f3e77936157eee1a6cfc9c22e0

上面的IP地址和token是我的试验机,需要改成你自己的。

如果token过期了,可以重新创建,参考:《Kubernetes加入新节点,经验总结》。

5、检查状态

检查版本:

~$ kubectl version

查看Pod信息:

kubectl get pod --all-namespaces

完成。

⚠️注意:1.17后版本,如果使用kubeadm安装为高可用模式,所有master节点都可以被升为最新版本(需要提前把k8s的容器镜像放到节点上去)。

更多参考:

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部