学习Kk8s——搭建k8s集群
作者:互联网
学习k8s的最好方式是自己搭建一个k8s集群,并实际操作。按照官方教程,其实并不复杂,但是由于网络问题,很多软件和镜像无法下载,所以安装过程还是比较麻烦的。
学习k8s并不需要集群环境,个人电脑就可以搭建一个单机集群来学习。下面简单介绍下过程,会跳过比较简单的步骤,重点说下需要注意的事项
一、安装虚拟机和linux系统
虚拟机可以使用hyper-v,virtualbox,和vmware。我用的是VirtualBox 6.1.0版本,下载地址是https://www.virtualbox.org/wiki/Downloads。
系统用的是CentOS-7-x86_64-Minimal-1908。学习用的话建议使用Minimal,下载和安装都很快。下载地址是 http://isoredirect.centos.org/centos/7/isos/x86_64/,选择一个速度较快的镜像地址下载。
安装教程,网上很多,这里就不说了。需要建议的地方是,1、安装语言选择中文。2、软件选择最小安装,禁用KDUMP;配置网络连接
注意:1、虚拟机配置中设置CPU个数为2或者以上
2、防火墙会给k8s集群带来一些问题,这里仅为学习用,可以直接关闭防火墙。
3、关闭Swap。执行swapoff -a可临时关闭,编辑/etc/fstab,注释掉包含swap的那一行即可,重启后可永久关闭
systemctl stop firewalld & systemctl disable firewalld
二、安装docker
首先参考官方文档
https://docs.docker.com/install/linux/docker-ce/centos/#prerequisites
https://kubernetes.io/docs/setup/production-environment/container-runtimes/
# Install Docker CE ## Set up the repository ### Install required packages. yum install yum-utils device-mapper-persistent-data lvm2 ### Add Docker repository.
### 注意这里换成阿里云的地址 yum-config-manager --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ## Install Docker CE. yum update && yum install \ containerd.io \ docker-ce \ docker-ce-cli ## Create /etc/docker directory. mkdir /etc/docker # Setup daemon. cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] } EOF mkdir -p /etc/systemd/system/docker.service.d # Restart Docker systemctl daemon-reload systemctl restart docker
echo "1" > /proc/sys/net/bridge/bridge-nf-call-iptables
设置开机启动
systemctl start docker & systemctl enable docker
验证安装是否成功
docker run hello-world
结果如下
Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
三、安装Kubernetes
官方文档https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
注意:需要改成国内的镜像地址
## 配置kubernetes.repo,注意改成阿里云的地址,否则下不下来。
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF # Set SELinux in permissive mode (effectively disabling it) setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes systemctl enable --now kubelet
启动kubelet
systemctl enable kubelet && systemctl start kubelet
四、配置K8S单机集群
这里使用Calico方案来部署k8s单机集群
官方文档:https://docs.projectcalico.org/v3.11/getting-started/kubernetes/
初始换环境,并下载安装k8s镜像
kubeadm init --pod-network-cidr=192.168.0.0/16
注意ip地址根据实际情况更改
由于这一步需要下载k8s的docker镜像,国内不用代理的话基本上是下载不下来的。所以这里会出错,出错的原因就是镜像pull失败。会出现类似下面的错误信息
[ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.17.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) , error: exit status 1
失败信息中给出了pull失败的镜像地址。github上有人已经下载所有的镜像并上传到国内地址,可以从那下载。
github地址:https://github.com/anjia0532/gcr.io_mirror
镜像地址转换规则
gcr.io/namespace/image_name:image_tag #eq gcr.azk8s.cn/namespace/image_name:image_tag # special k8s.gcr.io/{image}/{tag} <==> gcr.io/google-containers/{image}/{tag} <==> gcr.azk8s.cn/namespace/image_name:image_tag
例如上面初始话下载失败的镜像地址是k8s.gcr.io/kube-apiserver:v1.17.0。
k8s.gcr.io/kube-apiserver:v1.17.0 转换为 gcr.azk8s.cn/google-containers/kube-apiserver:v1.17.0
下载镜像
docker pull gcr.azk8s.cn/google-containers/kube-apiserver:v1.17.0
由于,kubeadm init拉取的镜像地址是官方的地址,因此我们需要打对应的tag
docker tag gcr.azk8s.cn/google-containers/kube-apiserver:v1.17.0 k8s.gcr.io/kube-apiserver:v1.17.0
同样的方式完成所有镜像的下载。然后再次执行初始化,如果失败,可以先执行kubeadm reset
kubeadm init --pod-network-cidr=192.168.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
安装Calico
kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml
这一步也需要下载相应的calico镜像,也可能下载失败,大家可以去上面的yaml文件中,找到需要的镜像,然后搜索下载方式,这里就不说了。
验证是否成功
watch kubectl get pods --all-namespaces
结果如下就表示成功了
NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-6ff88bf6d4-tgtzb 1/1 Running 0 2m45s kube-system calico-node-24h85 1/1 Running 0 2m43s kube-system coredns-846jhw23g9-9af73 1/1 Running 0 4m5s kube-system coredns-846jhw23g9-hmswk 1/1 Running 0 4m5s kube-system etcd-jbaker-1 1/1 Running 0 6m22s kube-system kube-apiserver-jbaker-1 1/1 Running 0 6m12s kube-system kube-controller-manager-jbaker-1 1/1 Running 0 6m16s kube-system kube-proxy-8fzp2 1/1 Running 0 5m16s kube-system kube-scheduler-jbaker-1 1/1 Running 0 5m41s
如果calico-node出现ErrorImagePull等状态,就表示这个镜像没有下载成功,需要自己手动去国内镜像地址去下载,名称和版本号见https://docs.projectcalico.org/v3.11/manifests/calico.yaml
配置master节点为work节点
kubectl taint nodes --all node-role.kubernetes.io/master-
结果如下
node/<your-hostname> untainted
最后运行
kubectl get nodes -o wide
出现类型如下结果就表示成功了
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME <your-hostname> Ready master 52m v1.12.2 10.128.0.28 <none> Ubuntu 18.04.1 LTS 4.15.0-1023-gcp docker://18.6.1
标签:kube,Kk8s,gcr,集群,镜像,docker,k8s,Docker 来源: https://www.cnblogs.com/lilinwei340/p/12099217.html