美文网首页
Kubeadm实验集群搭建笔记

Kubeadm实验集群搭建笔记

作者: Wind哥 | 来源:发表于2020-12-25 09:38 被阅读0次

环境

Ubuntu 20.04 lts(3台 2核 8G内存,内存很重要,不然拉不起内置pod)
安装时把云设置成mirrors.aliyun.com,并选上shh
可访问外网,内网互通
为了方便操作,本文指令均在root下操作

1.关闭交换分区

##k8s要求关闭交换分区,大概意思好像是有多少硬件,我就用多少,虚拟出来的不要(外文这样说)
swapoff -a
##永久关闭
vi /etc/fstab
##注释swap一行

2.安装docker、kubeadm(使用阿里云)

$ curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
$ echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" >>/etc/apt/sources.list.d/kubernetes.list
$ apt-get update
$ apt-get install -y docker.io kubeadm

3.修改Docker源

Docker 官方中国区:https://registry.docker-cn.com
网易:http://hub-mirror.c.163.com
中国科技大学:https://docker.mirrors.ustc.edu.cn

增加文件
vi /etc/docker/daemon.json
{
    "registry-mirrors":[
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com"
    ],
    "exec-opts":["native.cgroupdriver=systemd"]
}


上述配置顺便修改cgroupfs->systemd(kubeadmin启动时候会检查)

重启服务
service docker restart

查看是否生效
docker info|grep Mirrors -A 3

4.开启docker服务

systemctl enable docker.service

至此,环境已经准备好,可以做以下快照

5.准备配置文件 kubeadm.yaml

##其中版本均为当前最新版
##指定镜像源(imageRepository),来解决k8s内置镜像拉取失败
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
controllerManager:
  extraArgs:
    horizontal-pod-autoscaler-use-rest-clients: "true"
    horizontal-pod-autoscaler-sync-period: "10s"
    node-monitor-grace-period: "10s"
apiServer:
  extraArgs:
    runtime-config: "api/all=true"
kubernetesVersion: "v1.20.0"
imageRepository: index.docker.io/gotok8s

##技巧
##1.可以通过以下指令来查询当前环境使用的版本信息
kubeadm config print init-defaults

##2.通过以下指令确认镜像(确认仓库是否设置成功)
kubeadm config images list --config kubeadm.yml

6.初始化

 kubeadm init  --config kubeadm.yaml

7.漫长等待(拉镜像,看网速,1、2分钟吧)

8.界面出现

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

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

kubeadm join 192.168.137.100:6443 --token k1jn8o.0x8900f35dxmk3r9 --discovery-token-ca-cert-hash sha256:94f68e53e9a458b3dabfd715bae2143928aeac0680c3486636bd9b999f0048e4

##恭喜,ok了,关键信息
##1.执行以下三句指令(保存授权信息)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

##保存指令(用于节点加入集群用)
kubeadm join 192.168.137.100:6443 --token k1jn8o.0x8900f35dxmk3r9 --discovery-token-ca-cert-hash sha256:94f68e53e9a458b3dabfd715bae2143928aeac0680c3486636bd9b999f0048e4

9.安装网络插件

##使用指令查看(指定命名空间)
kubectl get pods -n kube-system
##当前需要使用网络的pod是没初始化的

##部署网络插件:
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

## 通过get pods指令查看是否全部启动了

10.其他节点Join

其他节点做完第四步之后,调用join指令即可,稍等一会儿会提示成功,并输出一句指令,让查看状态
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

注意 该指令是需要在master上执行的

另外,此时在master上执行
kubectl get pods -n kube-system
能看到node的 pods正在初始化

11.enjoy yourself

root@k8s-master-100:/home/darin# kubectl get pods -n kube-system
NAME                                     READY   STATUS    RESTARTS   AGE
coredns-7b5988dfd8-bnflq                 1/1     Running   0          71m
coredns-7b5988dfd8-h7zf6                 1/1     Running   0          71m
etcd-k8s-master-100                      1/1     Running   0          71m
kube-apiserver-k8s-master-100            1/1     Running   0          71m
kube-controller-manager-k8s-master-100   1/1     Running   0          71m
kube-proxy-mvkwc                         1/1     Running   0          2m42s
kube-proxy-w5jqz                         1/1     Running   0          71m
kube-scheduler-k8s-master-100            1/1     Running   0          71m
weave-net-44rbm                          2/2     Running   0          2m42s
weave-net-j9mdh                          2/2     Running   0          6m40s
root@k8s-master-100:/home/darin# kubectl get nodes
NAME             STATUS   ROLES                  AGE     VERSION
k8s-master-100   Ready    control-plane,master   72m     v1.20.0
k8s-node-101     Ready    <none>                 3m18s   v1.20.0

使用脚本拉Image(在上述方式可行情况下不建议使用)

#原理先到其他仓库拉镜像后改tag,让kubeadm以为本地已经存在,直接使本地
#下面脚本为master需要的镜像,node需要的少一些,可以自己梳理,或者所有机器都拉(反正就用不到而已)
#node也是需要拉了镜像才能调用join

##init_images.sh
set -o errexit
set -o nounset
set -o pipefail
##这里定义版本
KUBE_VERSION=v1.20.0
KUBE_PAUSE_VERSION=3.2
ETCD_VERSION=3.4.13-0
DNS_VERSION=1.7.0

GCR_URL=k8s.gcr.io
##这里就是写你要使用的仓库
DOCKERHUB_URL=gotok8s
##这里是镜像列表
images=(
kube-proxy:${KUBE_VERSION}
kube-scheduler:${KUBE_VERSION}
kube-controller-manager:${KUBE_VERSION}
kube-apiserver:${KUBE_VERSION}
pause:${KUBE_PAUSE_VERSION}
etcd:${ETCD_VERSION}
coredns:${DNS_VERSION}
)
##这里是拉取和改名的循环语句
for imageName in ${images[@]} ; do
  docker pull $DOCKERHUB_URL/$imageName
  docker tag $DOCKERHUB_URL/$imageName $GCR_URL/$imageName
  docker rmi $DOCKERHUB_URL/$imageName
done

相关文章

网友评论

      本文标题:Kubeadm实验集群搭建笔记

      本文链接:https://www.haomeiwen.com/subject/kbdbnktx.html