苏州建设局网站,舆情报告撰写,济南做网站设计,电子商务网站建设与管理实验目的一、安装方式介绍 1、yum 安装 目前CentOS官方已经把Kubernetes源放入到自己的默认 extras 仓库里面#xff0c;使用 yum 安装#xff0c;好处是简单#xff0c;坏处也很明显#xff0c;需要官方更新 yum 源才能获得最新版本的软件#xff0c;而所有软件的依赖又不能自己指…一、安装方式介绍 1、yum 安装 目前CentOS官方已经把Kubernetes源放入到自己的默认 extras 仓库里面使用 yum 安装好处是简单坏处也很明显需要官方更新 yum 源才能获得最新版本的软件而所有软件的依赖又不能自己指定尤其是你的操作系统版本如果低的话使用 yum 源安装的 Kubernetes 的版本也会受到限制通常会低于官方很多版本我安装的时候目前官方版本为1.12而 yum 源中的版本为1.5.2。请查看博文https://blog.51cto.com/wzlinux/2321767 2、二进制安装 使用二进制文件安装好处是可以安装任意版本的 Kubernetes对一些新版本新功能追求的同学比较合适坏处是配置比较复杂很多软件包因为一些原因我们在大陆是访问不到的。 3、Kubeadm 安装 kubeadm 是 Kubernetes 官方提供的用于快速安装 Kubernetes 集群的工具伴随Kubernetes每个版本的发布都会同步更新kubeadm会对集群配置方面的一些实践做调整通过实验 kubeadm 可以学习到 Kubernetes 官方在集群配置上一些新的最佳实践。请查看博文https://blog.51cto.com/wzlinux/2322616 这里我们选用第二种方式安装。 二、环境准备 1、软件版本 我们安装的版本基本是目前最新的版本。 软件版本kubernetesv1.12.2CentOS 7.5CentOS Linux release 7.5.1804Dockerv18.06 这是官方推荐的etcd3.3.10flannel0.10.02、节点规划 IP角色安装软件172.18.8.200k8s masteretcdkube-apiserverkube-controller-managerkube-schedulerkubelet172.18.8.201k8s node01dockerkubeletkube-proxyflannel172.18.8.202k8s node02dockerkubeletkube-proxyflannel节点及网络规划如下 3、系统配置 关闭防火墙。 systemctl stop firewalld
systemctl disable firewalld 配置/etc/hosts添加如下内容。 172.18.8.200 master.wzlinux.com master
172.18.8.201 node01.wzlinux.com node01
172.18.8.202 node02.wzlinux.com node02 关闭SELinux。 sed -i s#SELINUXenforcing#SELINUXdisabled#g /etc/selinux/config
setenforce 0 关闭swap。 swapoff -a
sed -i s/.*swap.*/#/ /etc/fstab 4、二进制软件包下载 我们可以下载编译好的二进制文件也可以下载源码自己编译这里只讨论二进制的安装方式。在Kubernetes的Github CHANGELOG日志中可以看到最新的版本号也可以到Tag页面中找到自己需要的版本我下载的是 v1.12.2。 上传我们下载的二进制软件包到各节点并解压在root家目录查看目录内容。 [rootmaster ~]# ll kubernetes/server/bin/
total 1821524
-rwxr-xr-x 1 root root 60859975 Oct 24 15:49 apiextensions-apiserver
-rwxr-xr-x 1 root root 142923436 Oct 24 15:49 cloud-controller-manager
-rw-r--r-- 1 root root 8 Oct 24 15:44 cloud-controller-manager.docker_tag
-rw-r--r-- 1 root root 144309760 Oct 24 15:44 cloud-controller-manager.tar
-rwxr-xr-x 1 root root 248021112 Oct 24 15:49 hyperkube
-rwxr-xr-x 1 root root 54042644 Oct 24 15:49 kubeadm
-rwxr-xr-x 1 root root 192781649 Oct 24 15:49 kube-apiserver
-rw-r--r-- 1 root root 8 Oct 24 15:44 kube-apiserver.docker_tag
-rw-r--r-- 1 root root 194167808 Oct 24 15:44 kube-apiserver.tar
-rwxr-xr-x 1 root root 162961401 Oct 24 15:49 kube-controller-manager
-rw-r--r-- 1 root root 8 Oct 24 15:44 kube-controller-manager.docker_tag
-rw-r--r-- 1 root root 164347392 Oct 24 15:44 kube-controller-manager.tar
-rwxr-xr-x 1 root root 57352138 Oct 24 15:49 kubectl
-rwxr-xr-x 1 root root 176648680 Oct 24 15:49 kubelet
-rwxr-xr-x 1 root root 50330867 Oct 24 15:49 kube-proxy
-rw-r--r-- 1 root root 8 Oct 24 15:44 kube-proxy.docker_tag
-rw-r--r-- 1 root root 98355200 Oct 24 15:44 kube-proxy.tar
-rwxr-xr-x 1 root root 57184656 Oct 24 15:49 kube-scheduler
-rw-r--r-- 1 root root 8 Oct 24 15:44 kube-scheduler.docker_tag
-rw-r--r-- 1 root root 58570752 Oct 24 15:44 kube-scheduler.tar
-rwxr-xr-x 1 root root 2330265 Oct 24 15:49 mounter 这些包都是存储在google的服务器上面因为众所周知的原因我们是无法访问的所以需要各位科学上网才可以获取不过我可以把我获取的包传到网盘分享给大家。大家可以去下载使用。链接: https://pan.baidu.com/s/1Ut9VERgm55B4lmz0wjjzFQ 提取码: mjem 三、安装master master节点需要安装的服务有kube-apiserverkube-controller-managerkube-scheduler所以我们先把需要的二进制文件放到环境变量。 cd /root/kubernetes/server/bin
cp kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/local/bin/ 创建需要的目录。 mkdir -p /var/lib/etcd
mkdir -p /etc/etcd/
mkdir /etc/kubernetes 1、安装etcd 因为所以的组件都是需要etcd存储所以我们第一安装的就是etcd如果不是为了新版本为了方便可以使用yum安装。 我这里采用二进制安装方法首先下载安装包。 下载。 wget https://github.com/etcd-io/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gz 解压安装。 tar xf etcd-v3.3.10-linux-amd64.tar.gz
cd etcd-v3.3.10-linux-amd64
cp etcd etcdctl /usr/local/bin/ 创建system启动文件etcd.service。 cat EOF /usr/lib/systemd/system/etcd.service
[Unit]
Descriptionetcd.service[Service]
Typenotify
TimeoutStartSec0
Restartalways
WorkingDirectory/var/lib/etcd
EnvironmentFile-/etc/etcd/etcd.conf
ExecStart/usr/local/bin/etcd[Install]
WantedBymulti-user.target
EOF 创建配置文件。 cat EOF /etc/etcd/etcd.conf
ETCD_NAMEETCD Server
ETCD_DATA_DIR/var/lib/etcd/
ETCD_LISTEN_CLIENT_URLShttp://0.0.0.0:2379
ETCD_ADVERTISE_CLIENT_URLShttp://172.18.8.200:2379
EOF 启动etcd。 systemctl daemon-reload
systemctl start etcd.service
systemctl enable etcd.service 查看启动状态。 [rootmaster ~]# netstat -tlnp|grep etcd
tcp 0 0 127.0.0.1:2380 0.0.0.0:* LISTEN 1550/etcd
tcp6 0 0 :::2379 :::* LISTEN 1550/etcd
[rootmaster ~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://172.18.8.200:2379
cluster is healthy 说明 etcd 会启用两个端口其中2380 是集群的通信端口2379是服务端口。如果是配置etcd集群则要修改配置文件设置监听IP和端口。 2、安装 kube-apiserver 创建启动文件/usr/lib/systemd/system/kube-apiserver.service修改为如下内容 [Unit]
DescriptionKubernetes API Server
Documentationhttps://github.com/GoogleCloudPlatform/kubernetes
Afternetwork.target
Afteretcd.service[Service]
EnvironmentFile/etc/kubernetes/apiserver
ExecStart/usr/local/bin/kube-apiserver \$KUBE_ETCD_SERVERS \$KUBE_BIND_ADDRESS \$KUBE_API_PORT \$KUBE_SERVICE_ADDRESSES \$KUBE_ADMISSION_CONTROL \$KUBE_API_ARGS
Restarton-failure
Typenotify
LimitNOFILE65536[Install]
WantedBymulti-user.target 创建目录和配置文件。 cat EOF /etc/kubernetes/apiserver
KUBE_BIND_ADDRESS--bind-address0.0.0.0
KUBE_API_PORT--port8080
KUBE_ETCD_SERVERS--etcd-servershttp://172.18.8.200:2379
KUBE_SERVICE_ADDRESSES--service-cluster-ip-range10.96.0.0/12
KUBE_ADMISSION_CONTROL--admission-controlNamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota
KUBE_API_ARGS
EOF 启动服务。 systemctl daemon-reload
systemctl start kube-apiserver.service
systemctl enable kube-apiserver.service 查看启动是否成功。 [rootmaster ~]# netstat -tnlp | grep kube
tcp6 0 0 :::6443 :::* LISTEN 11086/kube-apiserve
tcp6 0 0 :::8080 :::* LISTEN 11086/kube-apiserve kube-apiserver监听在两个端口6443是https加密通信方式8080是http的通信方式我们这里没有配置证书选项所以我们的通信都是明文通信官方文档查看。 3、安装kube-controller-manager 创建启动文件/usr/lib/systemd/system/kube-controller-manager.service添加如下内容 [Unit]
DescriptionKubernetes Controller Manager
Documentationhttps://github.com/GoogleCloudPlatform/kubernetes
Afterkube-apiserver.service
Requireskube-apiserver.service[Service]
EnvironmentFile-/etc/kubernetes/controller-manager
ExecStart/usr/local/bin/kube-controller-manager \$KUBE_MASTER \$KUBE_CONTROLLER_MANAGER_ARGS
Restarton-failure
LimitNOFILE65536[Install]
WantedBymulti-user.target 创建配置文件controller-managerIP根据自己的实际情况进行修改。 cat EOF /etc/kubernetes/controller-manager
KUBE_MASTER--masterhttp://172.18.8.200:8080
KUBE_CONTROLLER_MANAGER_ARGS
EOF 启动服务。 systemctl daemon-reload
systemctl start kube-controller-manager.service
systemctl enable kube-controller-manager.service 验证服务状态。 [rootmaster ~]# netstat -lntp | grep kube-controll
tcp6 0 0 :::10252 :::* LISTEN 11131/kube-controll
tcp6 0 0 :::10257 :::* LISTEN 11131/kube-controll 端口10257为https提供身份验证和授权10252为默认非加密端口官方文档查看。 4、安装kube-scheduler 创建启动文件/usr/lib/systemd/system/kube-scheduler.service添加如下内容 [Unit]
DescriptionKubernetes Scheduler Plugin
Documentationhttps://github.com/GoogleCloudPlatform/kubernetes
Afterkube-apiserver.service
Requireskube-apiserver.service[Service]
EnvironmentFile/etc/kubernetes/scheduler
ExecStart/usr/local/bin/kube-scheduler \$KUBE_MASTER \$KUBE_SCHEDULER_ARGS
Restarton-failure
LimitNOFILE65536[Install]
WantedBymulti-user.target 创建配置文件/etc/kubernetes/scheduler。 cat EOF /etc/kubernetes/scheduler
KUBE_MASTER--masterhttp://172.18.8.200:8080
KUBE_SCHEDULER_ARGS
EOF 启动服务。 systemctl daemon-reload
systemctl start kube-scheduler.service
systemctl enable kube-scheduler.service 验证服务状态。 [rootmaster ~]# netstat -lntp | grep kube-schedule
tcp6 0 0 :::10251 :::* LISTEN 11178/kube-schedule 端口10251是非加密端口https端口为10259。官方文件查看。 使用 kubectl 查看状态。 [rootmaster ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
etcd-0 Healthy {health:true}
controller-manager Healthy ok
scheduler Healthy ok 四、安装node节点(node01为例) 1、环境准备 node节点需要安装的服务有dockerkubeletkube-proxflannel所以我们先把需要的二进制文件放到环境变量。 cd /root/kubernetes/server/bin/
cp kubelet kube-proxy /usr/local/bin/ 加载ipvs内核使node节点kube-proxy支持ipvs代理规则。 modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh 创建需要的目录。 mkdir /var/lib/kubelet
mkdir /etc/kubernetes 配置转发参数。 cat EOF /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables 1
net.bridge.bridge-nf-call-iptables 1
EOF
sysctl --system 2、安装docker-ce 我们使用推荐的版本18.06此时docker官方的最新版本为18.09所以我们需要配置官方yum源。 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -P /etc/yum.repos.d/ yum list docker-ce.x86_64 --showduplicates |sort -r
yum install docker-ce-18.06.1.ce -y 配置加速器。 sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json -EOF
{registry-mirrors: [https://hdi5v8p1.mirror.aliyuncs.com]
}
EOF 2、安装 kube-proxy 服务 创建启动文件/usr/lib/systemd/system/kube-proxy.service添加如下内容 [Unit]
DescriptionKubernetes Kube-Proxy Server
Documentationhttps://github.com/GoogleCloudPlatform/kubernetes
Afternetwork.target[Service]
EnvironmentFile/etc/kubernetes/proxy
ExecStart/usr/local/bin/kube-proxy \$KUBE_MASTER \$KUBE_PROXY_ARGS
Restarton-failure
LimitNOFILE65536[Install]
WantedBymulti-user.target 创建需要的配置文件IP请根据自己的实际情况进行修改。 cat EOF /etc/kubernetes/proxy
KUBE_MASTER--masterhttp://172.18.8.200:8080
KUBE_PROXY_ARGS
EOF 启动服务。 systemctl daemon-reload
systemctl start kube-proxy.service
systemctl enable kube-proxy.service 查看启动状态。 [rootnode01 ~]# netstat -lntp | grep kube-proxy
tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 12273/kube-proxy
tcp6 0 0 :::10256 :::* LISTEN 12273/kube-proxy 端口10256负责健康检查10249负责和server通信官方文档查看。 3、安装 kubelete 服务 创建启动文件/usr/lib/systemd/system/kubelet.service新增如下内容 [Unit]
DescriptionKubernetes Kubelet Server
Documentationhttps://github.com/GoogleCloudPlatform/kubernetes
Afterdocker.service
Requiresdocker.service[Service]
WorkingDirectory/var/lib/kubelet
ExecStart/usr/local/bin/kubelet --kubeconfig/etc/kubernetes/kubeconfig.yaml
Restarton-failure[Install]
WantedBymulti-user.target 创建配置文件kubeconfig.yaml具体参数请根据自己的需求进行修改新增如下内容 cat EOF /etc/kubernetes/kubeconfig.yaml
apiVersion: v1
kind: Configusers:
- name: kubeletclusters:
- name: kubernetescluster: server: http://172.18.8.200:8080contexts:
- context:cluster: kubernetesuser: kubeletname: service-account-context
current-context: service-account-context
EOF kubeconfig官方文档请点击查看。 启动kubelet。 systemctl daemon-reload
systemctl start kubelet.service
systemctl enable kubelet.service 查看启动情况。 [rootnode01 ~]# netstat -tnlp | grep kubelet
tcp 0 0 127.0.0.1:43228 0.0.0.0:* LISTEN 12658/kubelet
tcp 0 0 127.0.0.1:10248 0.0.0.0:* LISTEN 12658/kubelet
tcp6 0 0 :::10250 :::* LISTEN 12658/kubelet
tcp6 0 0 :::10255 :::* LISTEN 12658/kubelet 配置官方文档请查看。 4、配置flannel网络(Pod使用) 我们之所以要单独使用第三方的网络插件来扩展k8s,主要原因是在使用docker的环境中在每个node节点的docker0默认的网段都是172.17.0.0/16的网络。如果要实现不同宿主node上pod这里也可以理解为容器互相通信就不能使用默认的docker0提供的网段我们需要部署一个覆盖网络让每个node节点的docker0网络都处于不同的网段这样通过添加一些路由转发策略就能让集群中各个pod在同一个虚拟的网络中实现通信。 从github官网下载最新版本。 wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz
tar xf flannel-v0.10.0-linux-amd64.tar.gz
cp flanneld /usr/local/bin/
cp mk-docker-opts.sh /usr/local/libexec/ 创建启动文件/usr/lib/systemd/system/flanneld.service新增如下内容 [Unit]
DescriptionFlanneld overlay address etcd agent
Afternetwork.target
Afternetwork-online.target
Wantsnetwork-online.target
Afteretcd.service
Beforedocker.service[Service]
Typenotify
EnvironmentFile/etc/sysconfig/flanneld
EnvironmentFile-/etc/sysconfig/docker-network
ExecStart/usr/local/bin/flanneld \$FLANNEL_ETCD_ENDPOINTS \$FLANNEL_ETCD_PREFIX \$FLANNEL_OPTIONS
ExecStartPost/usr/local/libexec/mk-docker-opts.sh -d /run/flannel/docker
Restarton-failure[Install]
WantedBymulti-user.target
RequiredBydocker.service 对上面的文件做一下解释 Flannel网络必须在宿主机网络能对外其它node节点正常通信的情况下启动才有意义所以这里定义Afternetwork.target只有当Flannel 网络启动之后才能创建一个与其它节点不会冲突的网络而docker的网络需要和fannel 网络相同才能保证跨主机通信所以docker必须要在flannel网络创建后才能启动这里定义Beforedocker.service创建配置文件/etc/sysconfig/flanneld设置为如下内容 cat EOF /etc/sysconfig/flanneld
# Flanneld configuration options # etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS-etcd-endpointshttp://172.18.8.200:2379# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX-etcd-prefix/atomic.io/network# Any additional options that you want to pass
FLANNEL_OPTIONS
EOF 在master节点上为 falnnel 创建分配的网络。 [rootmaster ~]# etcdctl mk /atomic.io/network/config {Network: 10.244.0.0/16} 在各node节点上启动 flannel。 systemctl daemon-reload
systemctl start flanneld.service
systemctl enable flanneld.service 检查是否启动好。 ps -ef |grep flanneld 也可以使用自助安装官方建议的使用方法。kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 5、启动docker 编辑文件/usr/lib/systemd/system/docker.service修改为如下内容让docker使用flannel网络。 [Unit]
DescriptionDocker Application Container Engine
Documentationhttps://docs.docker.com
Afternetwork-online.target firewalld.service flannel.service
Wantsnetwork-online.target
Requiresflanneld.service[Service]
Typenotify
EnvironmentFile-/run/flannel/docker
ExecStart/usr/bin/dockerd $DOCKER_OPTS
ExecReload/bin/kill -s HUP $MAINPID
LimitNOFILEinfinity
LimitNPROCinfinity
LimitCOREinfinity
TimeoutStartSec0
Delegateyes
KillModeprocess
Restarton-failure
StartLimitBurst3
StartLimitInterval60s[Install]
WantedBymulti-user.target 我们最后启动docker服务。 systemctl daemon-reload
systemctl restart docker.service
systemctl enable docker.service 我们可以看到docker0已经连接到flannel0并且添加10.244.71.0/24的路由。 [rootnode01 ~]# ip r
default via 172.18.8.1 dev ens33 proto static metric 100
10.244.0.0/16 dev flannel0 proto kernel scope link src 10.244.71.0
10.244.71.0/24 dev docker0 proto kernel scope link src 10.244.71.1
172.18.0.0/16 dev ens33 proto kernel scope link src 172.18.8.201 metric 100 五、master节点验证 [rootmaster ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
node01.wzlinux.com Ready none 5m38s v1.12.2
node02.wzlinux.com Ready none 5m34s v1.12.2 先运行几个pod看一下。 kubectl run nginx --imagenginx --replicas3 查看一下pod状态发现容器的状态为ContainerCreating使用kubectl describe pod POD_NAME发现在请求k8s.gcr.io/pause:3.1pod镜像模板。 因为我们还没有pod基础设施镜像k8s.gcr.io/pause:3.1就是所有pod的模板我们需要从gcr.io下载但是这个地址我们国内是无法访问的我们可以使用间接的方法在所有的node节点上我们可以从阿里云的镜像下载然后再tag成我们需要的镜像。 docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker image rm registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 问题解决之后我们再次查看。 [rootmaster ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
nginx-dbddb74b8-gzd6j 1/1 Running 0 2m11s 10.244.50.3 node02.wzlinux.com none
nginx-dbddb74b8-hmmll 1/1 Running 0 2m11s 10.244.50.2 node02.wzlinux.com none
nginx-dbddb74b8-lpkln 1/1 Running 0 2m11s 10.244.71.2 node01.wzlinux.com none 当前的网络结构图如下所示 我们可以创建一个service查看其分配的IP。 [rootmaster ~]# kubectl expose deploy nginx --port8888 --target-port80[rootmaster ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 none 443/TCP 51m
nginx ClusterIP 10.98.190.189 none 8888/TCP 7s 至此使用二进制程序搭建的过程我们已经介绍完了。转载于:https://blog.51cto.com/wzlinux/2322345