kubernetes安装和调试(1.20.9+docker19.03.0+weave) 学习kubernetes来对项目进行容器化部署。这里使用了VMware创建虚拟机来搭建k8s集群。
VMware:16.1.2,CentOS7,docker:19.03.0,kubeadm:1.20.9,kubectl:1.20.9,kubelet:1.20.9,weave。
CentOS安装 镜像下载
虚拟机创建 下载完成之后打开虚拟机进行安装即可。
到这儿就已经把虚拟机创建完成了,但是还需要配置网络和进行安装。
VMware网络配置 我的设置:
master节点IP: 172.31.0.3
node01节点IP:172.31.0.4
node02节点IP:172.31.0.5
子网掩码:255.255.0.0
网关:172.31.0.2
DNS:114.114.114.114
首先是在VMware中设置。
主页—>编辑—>虚拟网络编辑器
需要设置为静态的ip,所以在这儿取消勾选DHCP服务。
至此就设置完VMware了。
CentOS镜像安装
等待安装完成重启即可。
启动之后可以通过命令查看一下虚拟机的ip是否设置正确。
测试一下网络通不通
可以看到已经ping通了,所以网络没问题,搭建k8s集群需要有master节点和node节点,这次创建了一个master节点,两个node节点。上述演示了创建master节点的过程,node节点的创建同上,记得把ip修改一下。
kuberbetes安装 简单的设置 安装所需工具
1 2 3 sudo yum -y install vim sudo yum -y install wget
安装并配置 ntpdate,同步时间
1 2 3 4 5 6 7 sudo yum -y install ntpdate sudo ntpdate ntp1.aliyun.com sudo systemctl status ntpdate sudo systemctl start ntpdate sudo systemctl status ntpdate sudo systemctl enable ntpdate
将主机名加入hosts文件中
在文件最后加入下面的配置
1 2 3 172.31.0.3 master 172.31.0.4 node01 172.31.0.5 node02
设置安装的基础环境,比如需要关闭防火墙,关闭交换空间,关闭selinux等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 将 SELinux 设置为 permissive 模式(相当于将其禁用) sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 关闭swap swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab # 允许 iptables 检查桥接流量 cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system
关闭防火墙,或者开通指定端口(这个可以参考这篇☞文章 )
1 2 3 sudo systemctl stop firewalld.service sudo systemctl disable firewalld.service
或者用下面命令打开指定端口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 # 控制面板 firewall-cmd --zone=public --add-port=6443/tcp --permanent # Kubernetes API server 所有 firewall-cmd --zone=public --add-port=2379/tcp --permanent # etcd server client API kube-apiserver, etcd firewall-cmd --zone=public --add-port=2380/tcp --permanent # etcd server client API kube-apiserver, etcd firewall-cmd --zone=public --add-port=10250/tcp --permanent # Kubelet API 自身, 控制面 firewall-cmd --zone=public --add-port=10259/tcp --permanent # kube-scheduler 自身 firewall-cmd --zone=public --add-port=10257/tcp --permanent # kube-controller-manager 自身 firewall-cmd --zone=trusted --add-source=172.31.0.3 --permanent # 信任集群中各个节点的IP firewall-cmd --zone=trusted --add-source=172.31.0.4 --permanent # 信任集群中各个节点的IP firewall-cmd --zone=trusted --add-source=172.31.0.5 --permanent # 信任集群中各个节点的IP firewall-cmd --add-masquerade --permanent # 端口转发 firewall-cmd --reload firewall-cmd --list-all firewall-cmd --list-all --zone=trusted # 工作节点 firewall-cmd --zone=public --add-port=10250/tcp --permanent # Kubelet API 自身, 控制面 firewall-cmd --zone=public --add-port=30000-32767/tcp --permanent # NodePort Services† 所有 firewall-cmd --zone=trusted --add-source=172.31.0.3 --permanent # 信任集群中各个节点的IP firewall-cmd --zone=trusted --add-source=172.31.0.4 --permanent # 信任集群中各个节点的IP firewall-cmd --zone=trusted --add-source=172.31.0.5 --permanent # 信任集群中各个节点的IP firewall-cmd --add-masquerade --permanent # 端口转发 firewall-cmd --reload firewall-cmd --list-all firewall-cmd --list-all --zone=trusted
docker安装 移除系统自带的docker
1 2 3 4 5 6 7 8 9 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
配置yum源,镜像用的是阿里云
1 2 3 4 5 sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装指定版本的docker并启动
1 2 3 yum install -y docker-ce-19.03.0 docker-ce-cli-19.03.0 containerd.io-1.4.6 systemctl enable docker --now
配置加速
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 sudo mkdir -p /etc/docker # 创建文件夹 sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": [ "https://dockerproxy.com", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://ccr.ccs.tencentyun.com", "https://zv1b39f5.mirror.aliyuncs.com" ], "insecure-registries": ["172.31.0.66:8088"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
至此docker就安装成功
查看docker版本。
kubeadm安装 安装kubelet、kubeadm、kubectl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 配置k8s 下载的地址 cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF # 安装3大件 sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes # 启动kubelet sudo systemctl enable --now kubelet
构建集群 下载镜像
1 2 3 4 5 6 # 将所需镜像加入txt文件中 kubeadm config images list | grep '^k8s.gcr' >imglist.txt # 由于镜像是国外网站,创建shell脚本将镜像下载并用tag命名为原名称 vi pull.sh
1 2 3 4 5 6 7 # !/bin/bash for image in $(cat imglist.txt) do imagename=$(echo $image | awk -F '/' '{print$NF}') docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imagename docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imagename $image done
主节点初始化,只需要在master节点运行即可
1 2 3 4 5 6 7 8 kubeadm init \ --apiserver-advertise-address=172.31.0.3 \ --control-plane-endpoint=master \ --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \ --kubernetes-version v1.20.9 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=192.168.0.0/16
1 2 3 4 5 6 7 8 9 # 以下是各个命令的备注不需要执行 kubeadm init \ --apiserver-advertise-address=172.31.0.3 \ # master 节点ip --control-plane-endpoint=master \ # 域名值 --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \ # 镜像仓库 --kubernetes-version v1.20.9 \ # k8s 版本 --service-cidr=10.96.0.0/16 \ # 网络范围 一般不用改 网络范围不重叠 --pod-network-cidr=192.168.0.0/16 # k8s 给pod分配网络ip的范围 一般不用改 # 所有网络范围不重叠
出现下面的结果即为成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # 我自己的运行结果 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 # 部署pod网络插件 连接k8s所有网络 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/ You can now join any number of control-plane nodes by copying certificate authorities and service account keys on each node and then running the following as root: # 加入master节点 kubeadm join cluster-endpoint:6443 --token uu0mpy.fdsjy3wojwwpatyj \ --discovery-token-ca-cert-hash sha256:3d0c32c41667faf5424f6a3506e330bdaa57edda63c3d0f09bb4346c0b7c5b4f \ --control-plane Then you can join any number of worker nodes by running the following on each as root: # 加入工作node节点 kubeadm join cluster-endpoint:6443 --token uu0mpy.fdsjy3wojwwpatyj \ --discovery-token-ca-cert-hash sha256:3d0c32c41667faf5424f6a3506e330bdaa57edda63c3d0f09bb4346c0b7c5b4f
设置.kube/config 1 2 3 4 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
使用下面命令可以查看所有pod状态
1 2 kubectl get pod --all-namespaces -o wide
由于网络插件还没安装会有两个pod一直在pending
安装网络插件(weave) kubernetes文档
weave官网安装
公开镜像加速站
去官网下载weave的yaml文件,查看yaml文件中用到的镜像,由于是通过国外的仓库下载镜像总是因为网络出现下载失败的问题,这里通过用公开的国内镜像加速源来下载,再通过tag修改为国外镜像源下载的名称。
1 2 kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
1 2 3 4 5 docker pull docker.m.daocloud.io/weaveworks/weave-kube docker pull docker.m.daocloud.io/weaveworks/weave-npc docker tag docker.m.daocloud.io/weaveworks/weave-kube weaveworks/weave-kube docker tag docker.m.daocloud.io/weaveworks/weave-npc weaveworks/weave-npc
镜像下载完成,通过下面命令查看所有的pod,可以看到有两个weave正在初始化,等初始化完成之后之前两个pending中的pod也会创建。
1 2 kubectl get pod --all-namespaces -o wide
至此,集群就构建完成。
测试集群(创建nginx服务) 现在创建nginx服务来测试k8s集群搭建是否成功。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 # 带 命名空间、Service 的完整版参见:https://jihulab.com/xuxiaowei-cloud/xuxiaowei-cloud/-/blob/main/docs/deployment/nginx-deployment.yaml cat > nginx.yaml << EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.23.2 ports: - containerPort: 80 EOF cat nginx.yaml kubectl apply -f nginx.yaml # 编辑 # kubectl edit deployment nginx-deployment
启动成功之后查看是否正常创建pod
1 kubectl get pods --all-namespaces -o wide
1 2 # 控制面板:查看pod,svc kubectl get pod,svc -o wide
1 2 3 4 5 # 控制面板:设置服务(将多个 nginx-deployment 的 pod 绑定在一起,通过一个 Service 端口统一对外提供) kubectl expose deployment nginx-deployment --type=NodePort --name=nginx-service # 控制面板:查看pod,svc kubectl get pod,svc -o wide
可以看到节点服务已经启动,下面使用节点ip+端口号就可以访问到服务。
集群重置 使用命令将k8s的设置恢复初始化,恢复初始化之后得把$HOME/.kube
这个路径删除,不然再次init时会报错。
因为上面在init之后会执行一段命令初始化$HOME/.kube
这个文件。
1 2 3 4 5 6 kubeadm reset sysctl -w net.ipv4.ip_forward=1 rm -rf $HOME/.kube
初始化之后就可以再次用init命令对集群进行初始化,参考上面初始化过程即可。
参考文档 第一篇
博主的视频 和文章
k8s初始化参考
报错参考1 ,报错参考2
镜像加速站
相关资源 weave的yaml文件(阿里云盘):点击下载