k8s实战--通过kubeadmin部署完整K8s-1.15.3版本的集群的过程:centos 7安装 k8s
视频代码的手写和解释
前期准备:
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
上一篇: js中作用域与函数闭包实例讲解
下一篇: python如何判断是否为整数