视频代码的手写和解释

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐