欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

k8s实战--通过kubeadmin部署完整K8s-1.15.3版本的集群的过程:centos 7安装 k8s

程序员文章站 2022-03-12 11:51:43
...

视频代码的手写和解释

B站视频

前期准备:

centos 7 一个 master,两个 node。

参考【千锋达摩院】微服务架构 2.0(上),master 2核2G,node 2核4G

亲测环境:

  • VMware 12
  • CentOS-7-x86_64-DVD-1511.iso 最小安装
  • 配置IP地址,
  • yum -y docker-ce net-tools wget

注意:为了速度,可以先制作一台基础镜像,再克隆两台,后面不同配置项我有注明

(克隆两台 node 并修改内存、IP 、hostname 等)

设置主机名并永久生效

hostnamectl set-hostname master

设置域名映射主机名(不推荐使用 _,否则 kubeadm 初始化时会有更多的警告)

cat <<EOF >>/etc/hosts
<IP> master
<IP> node-1
<IP> node-2
EOF

停止并永久禁用防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭SELinux(sed 也可以 vi 操作了解 sed 意思)

setenforce 0

sed -i 's/^SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

关闭交换空间

swapoff -a

sed -i 's/.*swap.*/#&/' /etc/fstab

要求iptables对bridge的数据进行处理

cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

手动加载所有的配置文件(/usr/lib/sysctl.d/*.conf 和 /etc/sysctl.d/*.conf)

sysctl --system

使用 aliyun 的 Centos-7.repo 和 epel-7.repo(epel:Extra Packages for Enterprise Linux,一种镜像源)

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

清除 YUM 缓存(headers、packages)并生产新的缓存

yum clean all && yum makecache

坑:使用 yum update 更新软件包,更新时也更新了内核,导致克隆后,网卡配置中如果没有 HWADDR=<MAC> 并关闭 NetworkManager,会导致网卡开机启动、手动启动都失败。(原因不好找啊!)

配置 kubernetes 源

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

安装必须的软件包

(安装yum-utils,它提供一个yum-config-manager单元,同时安装的device-mapper-persistent-data和lvm2用于储存设备映射)

yum install -y yum-utils device-mapper-persistent-data lvm2

坑如下:需要网卡配置DNS2:114.114.114.114(可能是运气)

python-chardet-2.2.1-3.el7.noa FAILED                                          
http://mirrors.aliyuncs.com/centos/7/os/x86_64/Packages/python-chardet-2.2.1-3.el7.noarch.rpm: [Errno 14] curl#7 - "Failed connect to mirrors.aliyuncs.com:80; Connection refused"
正在尝试其它镜像。

配置 docker 源

wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo


或(需要安装了 yum-utils)

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 docker

yum install docker-ce -y

设置开启启动并启动 docker

systemctl enable docker && systemctl start docker

配置 docker 镜像加速器,后面有坑,不急。

安装 kubernetes (注意版本号)

yum install -y kubelet kubeadm kubectl

注意日志:

Installed:
  kubeadm.x86_64 0:1.18.2-0                                    kubectl.x86_64 0:1.18.2-0                                    kubelet.x86_64 0:1.18.2-0

Dependency Installed:
  conntrack-tools.x86_64 0:1.4.4-5.el7_7.2           cri-tools.x86_64 0:1.13.0-0                  kubernetes-cni.x86_64 0:0.7.5-0    libnetfilter_cthelper.x86_64 0:1.0.0-10.el7_7.1
  libnetfilter_cttimeout.x86_64 0:1.0.0-6.el7_7.1    libnetfilter_queue.x86_64 0:1.0.2-2.el7_2    socat.x86_64 0:1.7.3.2-2.el7

Dependency Updated:
  libnetfilter_conntrack.x86_64 0:1.0.6-1.el7_3

Complete!

设置开启启动 kubelet

systemctl enable kubelet

以上是通用配置,如果是一个设备,可以克隆了,之后修改 hostname 和 ip
下文解释:

  • <master>:k8s-master
  • <node>:k8s-node-1、k8s-node-2

master:使用 kubeadm 初始化 kubectl (设置 ali 的 image 源)(方法一)

kubeadm init --kubernetes-version=1.18.2 \
--apiserver-advertise-address=192.168.1.80   \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16 \
--exprimental-upload-certs | tee kubeadm-init.log

上面命令无声的视频没有最后一行,参考视频加的。(注意文件位置方便查找。)

时间相对较长,出现以下日志:

...
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

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.1.80:6443 --token pfs40z.o8w5dkiakbgfdvzm \
    --discovery-token-ca-cert-hash sha256:2591c36709511c03a159ef8102700b77edbb59a244acfe83012d5412d5149ba2

或方法二

master:使用 kubeadm 导出 kubectl  默认配置后初始化 kubectl :视频参考


node:node 链接 master

adm join 192.168.1.80:6443 --token pfs40z.o8w5dkiakbgfdvzm \
    --discovery-token-ca-cert-hash sha256:2591c36709511c03a159ef8102700b77edbb59a244acfe83012d5412d5149ba2

 

master:保留配置文件(非root用户工作目录必须执行第三条命名)

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

root用户也可执行取代上面方法:(未尝试)

export KUBECONFIG=/etc/kubernetes/admin.conf

master:
获取集群节点信息(node节点为NotReady,因为coredns pod没有启动,缺少网络 pod)

kubectl get nodes

检查组件运行状态

kubectl get cs

获取所有的 pod 信息(pod是kubernetes调度和管理的最小单位。)(注意 [] 为非必须参数)

kubectl get pods --all-namespaces [-o wide]

获取指定命名空间的 pod 信息(coredns 没有 ip ,因为缺少网络的 pod)(注意 [] 为非必须参数)

kubectl get pods -n kube-system [-o wide]

安装 flannel 网络(下面的url直接访问不行,可能有问题,没试,calico 的可以直接访问)

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

或者

安装 calico 网络(亲测,推荐)(下载的镜像比较大,时间看网速)

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

坑如下:node 的 calico 镜像下载失败,需要配置 docker 镜像加速器

master 中执行下面命令查看 pods 时 NAME 为 calico-node-xxxxx 的 pod STATUS 一直为 Init:ImagePullBackOff(镜像下载失败)

(pod 下载镜像有重试机制的)。node 中查看 docker 的 images 时,一直没有 calico 相关的镜像。

kubectl get pods --all-namespaces

配置 docker 镜像加速器(参考

  • 登录阿里云https://www.aliyun.com/
  • 右上角进入【控制台】
  • 左上角点击【产品与服务】
  • 搜索关键字【容器镜像服务】并点击进入
  • 选择左侧【镜像加速器】即可看到个人专属阿里云镜像加速地址及配置方法

下载 kubernetes-dashboard.yaml

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

根据 yml 创建 deployment (此处有坑,需要先执行下面的修改)

kubectl create -f kubernetes-dashboard.yaml

查询 kube-system 命名空间下设备 kubernetes-dashboard 的信息

kubectl get deployment kubernetes-dashboard -n kube-system

替换 kubernetes-dashboard.yaml 文件中所有 k8s.gcr.io 为 loveone(建议下面两个 vi 操作)

sed -i 's/k8s.gcr.io/loveone/g' kubernetes-dashboard.yaml

在 kubernetes-dashboard.yaml 文件中 targetPort: 后新建一行并添加 '\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort'

sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml

删除 kubernetes-dashboard.yaml 生成的 service (命令解释,安装不用执行)

kubectl delete -f kubernetes-dashboard.yaml

node:查看 docker 实例命令和查看 docker 镜像(docker 命令后面不介绍了)

docker ps
docker images

创建访问用户

kubectl create serviceaccount dashboard-admin -n kube-system

绑定用户和角色

kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

生成秘钥
 

kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

 

新手求赞,求评论。

有问题请留言。

GitHub:shi2i