首页 文章 精选 留言 我的

精选列表

搜索[单机],共4051篇文章
优秀的个人博客,低调大师

kubernetes 1.8 单机部署

注:这里就不科普了,直接开始部署。[这里使用HTTP来部署] 1. 关闭 SeLinux 和 FireWall 1 2 3 #sed-i"s/SELINUX=enforcing/SELINUX=disabled/g"/etc/selinux/config #systemctlstopfirewalld #systemctldisablefirewalld 2. 安装 docker 1 2 3 4 5 6 7 8 9 #yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2 #yum-config-manager--add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #yumlistdocker-ce--showduplicates|sort-r #yum-yinstalldocker-ce #docker--version Dockerversion17.06.2-ce,buildcec0b72 #systemctlstartdocker #systemctlstatusdocker #systemctlenabledocker 3. 安装 etcd 1 2 3 4 5 6 7 8 9 10 11 #curl-Lhttps://storage.googleapis.com/etcd/v3.2.9/etcd-v3.2.9-linux-amd64.tar.gz-o/root/etcd-v3.2.9-linux-amd64.tar.gz #tar-zxvfetcd-v3.2.9-linux-amd64.tar.gz #cpetcd-v3.2.9-linux-amd64/etcd*/usr/bin/ #etcd--version etcdVersion:3.2.9 GitSHA:f1d7dd8 GoVersion:go1.8.4 GoOS /Arch :linux /amd64 #etcdctl--version etcdctlversion:3.2.9 APIversion:2 4. 安装 Kubernetes 1 2 3 4 5 6 #wgethttps://storage.googleapis.com/kubernetes-release/release/v1.8.1/kubernetes-server-linux-amd64.tar.gz #tar-zxvfkubernetes-server-linux-amd64.tar.gz #cdkubernetes/server/bin/ #cpkubectlkube-apiserverkube-schedulerkube-controller-managerkubeletkube-proxy/usr/bin/ #kube-apiserver--version Kubernetesv1.8.1 5. 安装 flanneld 1 2 3 4 5 6 7 #curl-Lhttps://github.com/coreos/flannel/releases/download/v0.9.0/flannel-v0.9.0-linux-amd64.tar.gz-oflannel-v0.9.0-linux-amd64.tar.gz #tar-zxvfflannel-v0.9.0-linux-amd64.tar.gz #mvflanneld/usr/bin/ #mkdir/usr/libexec/flannel/ #mvmk-docker-opts.sh/usr/libexec/flannel/ #flanneld--version v0.9.0 6. 配置并启用 etcd A. 配置启动项 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #vim/usr/lib/systemd/system/etcd.service [Unit] Description=etcd After=network.target After=network-online.target Wants=network-online.target Documentation=https: //github .com /coreos/etcd [Service] Type=notify WorkingDirectory= /var/lib/etcd EnvironmentFile=- /etc/etcd/etcd .conf ExecStart= /usr/bin/etcd --config- file /etc/etcd/etcd .conf Restart=on-failure LimitNOFILE=65536 Restart=on-failure RestartSec=5 LimitNOFILE=65536 [Install] WantedBy=multi-user.target B. 配置各节点 etcd.conf 配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #mkdir-p/var/lib/etcd/ #mkdir-p/etc/etcd/ #exportETCD_NAME=etcd #exportINTERNAL_IP=192.168.100.104 #cat<<EOF>/etc/etcd/etcd.conf name: '${ETCD_NAME}' data- dir : "/var/lib/etcd/" listen-peer-urls:http: // ${INTERNAL_IP}:2380 listen-client-urls:http: // ${INTERNAL_IP}:2379,http: //127 .0.0.1:2379 initial-advertise-peer-urls:http: // ${INTERNAL_IP}:2380 advertise-client-urls:http: // ${INTERNAL_IP}:2379 initial-cluster: "etcd=http://${INTERNAL_IP}:2380" initial-cluster-token: 'etcd-cluster' initial-cluster-state: 'new' EOF 注: new-----初始化集群安装时使用该选项; existing-----新加入集群时使用该选项。 C.启动 etcd 1 2 3 #systemctlstartetcd #systemctlstatusetcd #systemctlenableetcd ##查看集群成员 1 2 #etcdctlmemberlist b0f5befc15246c67:name=etcdpeerURLs=http: //192 .168.100.104:2380clientURLs=http: //192 .168.100.104:2379isLeader= true ##查看集群健康状况 1 2 3 #etcdctlcluster-health memberb0f5befc15246c67ishealthy:gothealthyresultfromhttp: //192 .168.100.104:2379 clusterishealthy 7. 配置并启用flanneld A. 配置启动项 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #vim/usr/lib/systemd/system/flanneld.service [Unit] Description=Flanneldoverlayaddressetcdagent After=network.target After=network-online.target Wants=network-online.target After=etcd.service Before=docker.service [Service] Type=notify EnvironmentFile= /etc/sysconfig/flanneld EnvironmentFile=- /etc/sysconfig/docker-network ExecStart= /usr/bin/flanneld-start $FLANNEL_OPTIONS ExecStartPost= /usr/libexec/flannel/mk-docker-opts .sh-kDOCKER_NETWORK_OPTIONS-d /run/flannel/docker Restart=on-failure [Install] WantedBy=multi-user.target RequiredBy=docker.service 1 2 3 4 5 6 7 #vim/usr/bin/flanneld-start #!/bin/sh exec /usr/bin/flanneld \ -etcd-endpoints=${FLANNEL_ETCD_ENDPOINTS:-${FLANNEL_ETCD}}\ -etcd-prefix=${FLANNEL_ETCD_PREFIX:-${FLANNEL_ETCD_KEY}}\ "$@" #chmod755/usr/bin/flanneld-start B. 配置 flannel 配置文件 1 2 3 4 5 #etcdctlmkdir/kube/network #etcdctlset/kube/network/config'{"Network":"10.254.0.0/16"}' #grep^[A-Z]/etc/sysconfig/flanneld FLANNEL_ETCD_ENDPOINTS= "http://192.168.100.104:2379" FLANNEL_ETCD_PREFIX= "/kube/network" C. 启动 flanneld 1 2 3 #systemctlstartflanneld #systemctlstatusflanneld #systemctlenableflanneld D. 查看各节点网段 1 2 3 4 5 #cat/var/run/flannel/subnet.env FLANNEL_NETWORK=10.254.0.0 /16 FLANNEL_SUBNET=10.254.26.1 /24 FLANNEL_MTU=1472 FLANNEL_IPMASQ= false E. 更改 docker 网段为 flannel 分配的网段 1 2 3 4 5 6 7 8 #exportFLANNEL_SUBNET=10.254.26.1/24 #cat<<EOF>/etc/docker/daemon.json { "bip" : "$FLANNEL_SUBNET" } EOF #systemctldaemon-reload #systemctlrestartdocker F. 查看是否已分配相应网段 1 2 3 4 5 6 7 #route-n KernelIProutingtable DestinationGatewayGenmaskFlagsMetricRefUseIface 0.0.0.0192.168.200.20.0.0.0UG10000ens33 10.254.0.00.0.0.0255.255.0.0U000flannel0 10.254.26.00.0.0.0255.255.255.0U000docker0 192.168.100.00.0.0.0255.255.255.0U10000ens33 G. 使用 etcdctl 命令查看 flannel 的相关信息 1 2 3 4 5 6 7 8 9 #etcdctlls/kube/network/subnets /kube/network/subnets/10 .254.26.0-24 #etcdctl-oextendedget/kube/network/subnets/10.254.26.0-24 Key: /kube/network/subnets/10 .254.26.0-24 Created-Index:6 Modified-Index:6 TTL:85638 Index:6 { "PublicIP" : "192.168.100.104" } H. 测试网络是否正常 1 #ping-c410.254.26.1 8. 配置并启用 Kubernetes Master 节点 Kubernetes Master 节点包含的组件: kube-apiserver kube-scheduler kube-controller-manager A. 配置 config 文件 1 2 3 4 5 6 #mkdir-p/etc/kubernetes/ #grep^[A-Z]/etc/kubernetes/config KUBE_LOGTOSTDERR= "--logtostderr=true" KUBE_LOG_LEVEL= "--v=0" KUBE_ALLOW_PRIV= "--allow-privileged=false" KUBE_MASTER= "--master=http://192.168.100.104:8080" B. 配置 kube-apiserver 启动项 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 #vim/usr/lib/systemd/system/kube-apiserver.service [Unit] Description=KubernetesAPIServer Documentation=https: //github .com /kubernetes/kubernetes After=network.target After=etcd.service [Service] EnvironmentFile=- /etc/kubernetes/config EnvironmentFile=- /etc/kubernetes/apiserver ExecStart= /usr/bin/kube-apiserver \ $KUBE_LOGTOSTDERR\ $KUBE_LOG_LEVEL\ $KUBE_ETCD_SERVERS\ $KUBE_API_ADDRESS\ $KUBE_API_PORT\ $KUBELET_PORT\ $KUBE_ALLOW_PRIV\ $KUBE_SERVICE_ADDRESSES\ $KUBE_ADMISSION_CONTROL\ $KUBE_API_ARGS Restart=on-failure Type=notify LimitNOFILE=65536 [Install] WantedBy=multi-user.target C. 配置 apiserver 配置文件 1 2 3 4 5 6 #grep^[A-Z]/etc/kubernetes/apiserver KUBE_API_ADDRESS= "--advertise-address=192.168.100.104--bind-address=192.168.100.104--insecure-bind-address=0.0.0.0" KUBE_ETCD_SERVERS= "--etcd-servers=http://192.168.100.104:2379" KUBE_SERVICE_ADDRESSES= "--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL= "--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota" KUBE_API_ARGS= "--enable-swagger-ui=true--apiserver-count=3--audit-log-maxage=30--audit-log-maxbackup=3--audit-log-maxsize=100--audit-log-path=/var/log/apiserver.log" 注:使用 HTTP 和 使用 HTTPS 的最大不同就是--admission-control=ServiceAccount选项。 D. 启动 kube-apiserver 1 2 3 #systemctlstartkube-apiserver #systemctlstatuskube-apiserver #systemctlenablekube-apiserver E. 配置 kube-controller-manager 启动项 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #vim/usr/lib/systemd/system/kube-controller-manager.service [Unit] Description=KubernetesControllerManager Documentation=https: //github .com /kubernetes/kubernetes [Service] EnvironmentFile=- /etc/kubernetes/config EnvironmentFile=- /etc/kubernetes/controller-manager ExecStart= /usr/bin/kube-controller-manager \ $KUBE_LOGTOSTDERR\ $KUBE_LOG_LEVEL\ $KUBE_MASTER\ $KUBE_CONTROLLER_MANAGER_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target F.配置 kube-controller-manager 配置文件 1 2 #grep^[A-Z]/etc/kubernetes/controller-manager KUBE_CONTROLLER_MANAGER_ARGS= "--address=127.0.0.1--service-cluster-ip-range=10.254.0.0/16--cluster-name=kubernetes" G.启动 kube-controller-manager 1 2 3 #systemctlstartkube-controller-manager #systemctlstatuskube-controller-manager #systemctlenablekube-controller-manager H. 配置 kube-scheduler 启动项 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #vim/usr/lib/systemd/system/kube-scheduler.service [Unit] Description=KubernetesSchedulerPlugin Documentation=https: //github .com /kubernetes/kubernetes [Service] EnvironmentFile=- /etc/kubernetes/config EnvironmentFile=- /etc/kubernetes/scheduler ExecStart= /usr/bin/kube-scheduler \ $KUBE_LOGTOSTDERR\ $KUBE_LOG_LEVEL\ $KUBE_MASTER\ $KUBE_SCHEDULER_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target I.配置 kube-scheduler 配置文件 1 2 #grep^[A-Z]/etc/kubernetes/scheduler KUBE_SCHEDULER_ARGS= "--address=127.0.0.1" J. 启动 kube-scheduler 1 2 3 #systemctlstartkube-scheduler #systemctlstatuskube-scheduler #systemctlenablekube-scheduler K. 验证 Master 节点 1 2 3 4 5 6 #kubectlgetcomponentstatuses #kubectlgetcs NAMESTATUSMESSAGEERROR controller-managerHealthyok schedulerHealthyok etcd-0Healthy{ "health" : "true" } 9. 配置并启用 Kubernetes Node 节点 Kubernetes Node 节点包含如下组件: kubelet kube-proxy A. 配置 kubelet 启动项 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #vim/usr/lib/systemd/system/kubelet.service [Unit] Description=KubernetesKubeletServer Documentation=https: //github .com /kubernetes/kubernetes After=docker.service Requires=docker.service [Service] WorkingDirectory= /var/lib/kubelet EnvironmentFile=- /etc/kubernetes/config EnvironmentFile=- /etc/kubernetes/kubelet ExecStart= /usr/bin/kubelet \ $KUBE_LOGTOSTDERR\ $KUBE_LOG_LEVEL\ $KUBELET_ADDRESS\ $KUBELET_PORT\ $KUBELET_HOSTNAME\ $KUBE_ALLOW_PRIV\ $KUBELET_POD_INFRA_CONTAINER\ $KUBELET_ARGS Restart=on-failure [Install] WantedBy=multi-user.target B. 配置 kubelet 配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #mkdir-p/var/lib/kubelet #exportMASTER_ADDRESS=192.168.100.104 #exportKUBECONFIG_DIR=/etc/kubernetes #cat<<EOF>"${KUBECONFIG_DIR}/kubelet.kubeconfig" apiVersion:v1 kind:Config clusters: -cluster: server:http: // ${MASTER_ADDRESS}:8080/ name: local contexts: -context: cluster: local name: local current-context: local EOF 1 2 3 4 5 6 #grep^[A-Z]/etc/kubernetes/kubelet KUBELET_ADDRESS= "--address=192.168.100.104" KUBELET_PORT= "--port=10250" KUBELET_HOSTNAME= "--hostname-override=master" KUBELET_POD_INFRA_CONTAINER= "--pod-infra-container-image=hub.c.163.com/k8s163/pause-amd64:3.0" KUBELET_ARGS= "--kubeconfig=/etc/kubernetes/kubelet.kubeconfig--fail-swap-on=false--cluster-dns=10.254.0.2--cluster-domain=cluster.local.--serialize-image-pulls=false" C. 启动 kubelet 1 2 3 #systemctlstartkubelet #systemctlstatuskubelet #systemctlenablekubelet 注: --fail-swap-on ##如果在节点上启用了swap,则Kubelet无法启动.(default true)[该命令是1.8版本开始才有的] --cluster-dns=10.254.0.2 --cluster-domain=cluster.local. ##与 KubeDNS Pod 配置的参数一致 --kubeconfig=/etc/kubernetes/kubelet.kubeconfig ##新版本不再支持 --api-servers 模式 D. 配置 kube-proxy 启动项 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #vim/usr/lib/systemd/system/kube-proxy.service [Unit] Description=KubernetesKube-ProxyServer Documentation=https: //github .com /kubernetes/kubernetes After=network.target [Service] EnvironmentFile=- /etc/kubernetes/config EnvironmentFile=- /etc/kubernetes/proxy ExecStart= /usr/bin/kube-proxy \ $KUBE_LOGTOSTDERR\ $KUBE_LOG_LEVEL\ $KUBE_MASTER\ $KUBE_PROXY_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target E.配置 kube-proxy 配置文件 1 2 #grep^[A-Z]/etc/kubernetes/proxy KUBE_PROXY_ARGS= "--bind-address=192.168.100.104--hostname-override=192.168.100.104--cluster-cidr=10.254.0.0/16" F. 启动 kube-proxy 1 2 3 #systemctlstartkube-proxy #systemctlstatuskube-proxy #systemctlenablekube-proxy G.查看 Nodes相关信息 1 2 3 4 5 6 7 8 9 10 11 12 #kubectlgetnodes NAMESTATUSROLESAGEVERSION masterReady<none>5hv1.8.1 #kubectlgetnodes-owide NAMESTATUSROLESAGEVERSIONEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIME masterReady<none>5hv1.8.1<none>CentOSLinux7(Core)3.10.0-693.2.2.el7.x86_64docker: //Unknown #kubectlgetnodes--show-labels NAMESTATUSROLESAGEVERSIONLABELS masterReady<none>5hv1.8.1beta.kubernetes.io /arch =amd64,beta.kubernetes.io /os =linux,kubernetes.io /hostname =master #kubectlversion--short ClientVersion:v1.8.1 ServerVersion:v1.8.1 H.查看集群信息 1 2 #kubectlcluster-info Kubernetesmasterisrunningathttp: //localhost :8080 10. 部署 KubeDNS 插件 官方的yaml文件目录:kubernetes/cluster/addons/dns。 https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns 1 #mkdirdns&&cddns ##下载 Kube-DNS 相关 yaml 文件 1 #curl-Ohttps://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/dns/kube-dns.yaml.base ##修改后缀 1 #cpkube-dns.yaml.basekube-dns.yaml ### 替换所有的 images 1 #sed-i's/gcr.io\/google_containers/192.168.100.100\/k8s/g'kube-dns.yaml ####替换如下 1 2 #sed-i"s/__PILLAR__DNS__SERVER__/10.254.0.2/g"kube-dns.yaml #sed-i"s/__PILLAR__DNS__DOMAIN__/cluster.local/g"kube-dns.yaml ######对比 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 #diffkube-dns.yamlkube-dns.yaml.base 33c33 <clusterIP:10.254.0.2 --- >clusterIP:__PILLAR__DNS__SERVER__ 97c97 <image:192.168.100.100 /k8s/k8s-dns-kube-dns-amd64 :1.14.5 --- >image:gcr.io /google_containers/k8s-dns-kube-dns-amd64 :1.14.6 127,128c127 <---domain=cluster. local . <---kube-master-url=http: //192 .168.100.104:8080 --- >---domain=__PILLAR__DNS__DOMAIN__. 149c148 <image:192.168.100.100 /k8s/k8s-dns-dnsmasq-nanny-amd64 :1.14.5 --- >image:gcr.io /google_containers/k8s-dns-dnsmasq-nanny-amd64 :1.14.6 169c168 <---server= /cluster . local /127 .0.0.1 #10053 --- >---server= /__PILLAR__DNS__DOMAIN__/127 .0.0.1 #10053 188c187 <image:192.168.100.100 /k8s/k8s-dns-sidecar-amd64 :1.14.5 --- >image:gcr.io /google_containers/k8s-dns-sidecar-amd64 :1.14.6 201,202c200,201 <---probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster. local ,5,A <---probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster. local ,5,A --- >---probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.__PILLAR__DNS__DOMAIN__,5,SRV >---probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.__PILLAR__DNS__DOMAIN__,5,SRV 注1:这里我用的镜像是自己搭建的镜像仓库来pull,写这篇博文时kube-dns更新到了1.14.6,开会,墙又高了许多,所以拉取困难,我用回了1.14.5的版本,这里自行更改,自己能科学上网拉取最新版当然更好。 注2:看对比,第二个不同,1.14.6版--probe最后是SRV,而1.14.5版最后是A,这儿也要更改,不然会产生CrashLoopBackOff 错误。 注3:这里我们要使用--kube-master-url命令指定apiserver,不然也会产生CrashLoopBackOff 错误。 注4: 我将镜像放在了网易蜂巢上,地址: hub.c.163.com/zhijiansd/k8s-dns-kube-dns-amd64:1.14.5 hub.c.163.com/zhijiansd/k8s-dns-dnsmasq-nanny-amd64:1.14.5 hub.c.163.com/zhijiansd/k8s-dns-sidecar-amd64:1.14.5 ### 执行该文件 1 2 3 4 5 #kubectlcreate-fkube-dns.yaml service "kube-dns" created serviceaccount "kube-dns" created configmap "kube-dns" created deployment "kube-dns" created ### 查看 KubeDNS 服务 1 2 3 #kubectlgetpod-nkube-system NAMEREADYSTATUSRESTARTSAGE kube-dns-84f48d556b-qprmw3 /3 Running35h ###查看集群信息 1 2 3 4 5 #kubectlgetservice-nkube-system|grepdns kube-dnsClusterIP10.254.0.2<none>53 /UDP ,53 /TCP 5h #kubectlcluster-info Kubernetesmasterisrunningathttp: //localhost :8080 KubeDNSisrunningathttp: //localhost :8080 /api/v1/namespaces/kube-system/services/kube-dns/proxy ####查看 KubeDNS 守护程序的日志 1 2 3 #kubectllogs--namespace=kube-system$(kubectlgetpods--namespace=kube-system-lk8s-app=kube-dns-oname)-ckubedns #kubectllogs--namespace=kube-system$(kubectlgetpods--namespace=kube-system-lk8s-app=kube-dns-oname)-cdnsmasq #kubectllogs--namespace=kube-system$(kubectlgetpods--namespace=kube-system-lk8s-app=kube-dns-oname)-csidecar 11. 部署 Heapster 组件 ###下载 heapster 1 2 3 4 5 6 7 #wgethttps://codeload.github.com/kubernetes/heapster/tar.gz/v1.5.0-beta.0-Oheapster-1.5.0-beta.tar.gz #tar-zxvfheapster-1.5.0-beta.tar.gz #cdheapster-1.5.0-beta.0/deploy/kube-config #cprbac/heapster-rbac.yamlinfluxdb/ #cdinfluxdb/ #ls grafana.yamlheapster-rbac.yamlheapster.yamlinfluxdb.yaml ###替换所有images 1 #sed-i's/gcr.io\/google_containers/192.168.100.100\/k8s/g'*.yaml 注:这里我也将镜像放在了网易蜂巢上,请自行更改: hub.c.163.com/zhijiansd/heapster-grafana-amd64:v4.4.3 hub.c.163.com/zhijiansd/heapster-amd64:v1.4.0 hub.c.163.com/zhijiansd/heapster-influxdb-amd64:v1.3.3 ###更改 heapster.yaml 1 2 3 #grepsourceheapster.yaml #---source=kubernetes:https://kubernetes.default --- source =kubernetes:http: //192 .168.100.104:8080?inClusterConfig= false 注: heapster 默认使用 https 连接 apiserver ,这里更改为使用 http 连接。 ###执行 influxdb 目录下的所有文件 1 2 3 4 5 6 7 8 9 #kubectlcreate-f. deployment "monitoring-grafana" created service "monitoring-grafana" created clusterrolebinding "heapster" created serviceaccount "heapster" created deployment "heapster" created service "heapster" created deployment "monitoring-influxdb" created service "monitoring-influxdb" created ###检查执行结果 1 2 3 4 #kubectlgetdeployments-nkube-system|grep-E'heapster|monitoring' heapster11116h monitoring-grafana11116h monitoring-influxdb11116h ###检查 Pods 1 2 3 4 5 6 7 8 #kubectlgetpods-nkube-system|grep-E'heapster|monitoring' heapster-6c96ccd7c4-xbmlc1 /1 Running16h monitoring-grafana-98d44cd67-z5m991 /1 Running16h monitoring-influxdb-6b6d749d9c-schdp1 /1 Running16h #kubectlgetsvc-nkube-system|grep-E'heapster|monitoring' heapsterClusterIP10.254.201.85<none>80 /TCP 6h monitoring-grafanaClusterIP10.254.138.73<none>80 /TCP 6h monitoring-influxdbClusterIP10.254.45.121<none>8086 /TCP 6h ###查看集群信息 1 2 3 4 5 6 #kubectlcluster-info Kubernetesmasterisrunningathttp: //localhost :8080 Heapsterisrunningathttp: //localhost :8080 /api/v1/namespaces/kube-system/services/heapster/proxy KubeDNSisrunningathttp: //localhost :8080 /api/v1/namespaces/kube-system/services/kube-dns/proxy monitoring-grafanaisrunningathttp: //localhost :8080 /api/v1/namespaces/kube-system/services/monitoring-grafana/proxy monitoring-influxdbisrunningathttp: //localhost :8080 /api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy 12. 部署 Kubernetes Dashboard 这里我们使用不需要证书的版本: 1 #curl-Ohttps://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/alternative/kubernetes-dashboard.yaml ### 替换 images 1 #sed-i's/gcr.io\/google_containers/192.168.100.100\/k8s/g'kubernetes-dashboard.yaml 注:请自行更改镜像地址: hub.c.163.com/zhijiansd/kubernetes-dashboard-amd64:v1.7.1 ###添加 apiserver 地址 1 2 3 #grepapiserverkubernetes-dashboard.yaml #---apiserver-host=http://my-address:port ---apiserver-host=http: //192 .168.100.104:8080 ###执行该文件 1 2 3 4 5 6 #kubectlcreate-fkubernetes-dashboard.yaml serviceaccount "kubernetes-dashboard" configured role "kubernetes-dashboard-minimal" configured rolebinding "kubernetes-dashboard-minimal" configured deployment "kubernetes-dashboard" configured service "kubernetes-dashboard" configured ###检查kubernetes-dashboard 服务 1 2 #kubectlgetpods-nkube-system|grepdash kubernetes-dashboard-7648996855-54x6l1 /1 Running17h 注:1.7版不能使用 kubectl cluster-info 查看到 kubernetes-dashboard 地址,1.6.3版的可以。 1.7.0版需要使用http://localhost:8080/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/ 进行访问。而1.7.1版可以使用http://localhost:8080/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/ 访问,也可以使用http://localhost:8080/ui访问,其会自动跳转。 13.查看 kubernetes dashboard 使用http://localhost:8080/ui访问 节点界面 查看Pod界面 14. 查看grafana 使用http://localhost:8080/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy访问 查看Cluster 查看Pod 本文转自 结束的伤感 51CTO博客,原文链接:http://blog.51cto.com/wangzhijian/1975356

优秀的个人博客,低调大师

Hadoop单机部署方法

安装Java JDK: 到sun网站上下载jdk chmod +x jdk-6u30-linux-x64.bin ./jdk-6u30-linux-x64.bin 下载Hadoop wgethttp://labs.renren.com/apache-mirror/hadoop/common/hadoop-0.20.205.0/hadoop-0.20.205.0.tar.gz tar zxvf hadoop-0.20.205.0.tar.gz 安装必要软件 yum install ssh rsync 修改配置文件 conf/core-site.xml: <configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> </configuration> conf/hdfs-site.xml: <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> conf/mapred-site.xml: <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration> conf/hadoop-env.sh export JAVA_HOME=/root/jdk1.6.0_30 bin/hadoop 以root用户运行会报-jvm参数不存在的错误,故将 if [[ $EUID -eq 0 ]]; then HADOOP_OPTS="$HADOOP_OPTS -jvm server $HADOOP_DATANODE_OPTS" else HADOOP_OPTS="$HADOOP_OPTS -server $HADOOP_DATANODE_OPTS" fi 修改为 elif [ "$COMMAND" = "datanode" ] ; then CLASS='org.apache.hadoop.hdfs.server.datanode.DataNode' HADOOP_OPTS="$HADOOP_OPTS -server $HADOOP_DATANODE_OPTS" SSH设置 $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 启动hadoop $ bin/hadoop namenode -format$ bin/start-all.sh 此时,通过本地的50070和50030端口就可以分别浏览到NameNode和JobTracker: NameNode -http://localhost:50070/ JobTracker -http://localhost:50030/ 测试wordcount 生成测试数据: [root hadoop-0.20.205.0]# mkdir input [root hadoop-0.20.205.0]# echo "hello world" >> input/a.txt [root hadoop-0.20.205.0]# echo "hello hadoop" >> input/b.txt 将本地数据复制到HDFS中: [root hadoop-0.20.205.0]# bin/hadoop fs -put input in 执行测试任务: [root hadoop-0.20.205.0]# bin/hadoop jar hadoop-examples-0.20.205.0.jar wordcount in out 12/02/05 21:00:47 INFO input.FileInputFormat: Total input paths to process : 2 12/02/05 21:00:48 INFO mapred.JobClient: Running job: job_201202052055_0001 12/02/05 21:00:49 INFO mapred.JobClient: map 0% reduce 0% 12/02/05 21:01:07 INFO mapred.JobClient: map 100% reduce 0% 12/02/05 21:01:19 INFO mapred.JobClient: map 100% reduce 100% 12/02/05 21:01:24 INFO mapred.JobClient: Job complete: job_201202052055_0001 12/02/05 21:01:24 INFO mapred.JobClient: Counters: 29 12/02/05 21:01:24 INFO mapred.JobClient: Job Counters 12/02/05 21:01:24 INFO mapred.JobClient: Launched reduce tasks=1 12/02/05 21:01:24 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=22356 12/02/05 21:01:24 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0 12/02/05 21:01:24 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0 12/02/05 21:01:24 INFO mapred.JobClient: Launched map tasks=2 12/02/05 21:01:24 INFO mapred.JobClient: Data-local map tasks=2 12/02/05 21:01:24 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=10801 12/02/05 21:01:24 INFO mapred.JobClient: File Output Format Counters 12/02/05 21:01:24 INFO mapred.JobClient: Bytes Written=25 12/02/05 21:01:24 INFO mapred.JobClient: FileSystemCounters 12/02/05 21:01:24 INFO mapred.JobClient: FILE_BYTES_READ=55 12/02/05 21:01:24 INFO mapred.JobClient: HDFS_BYTES_READ=235 12/02/05 21:01:24 INFO mapred.JobClient: FILE_BYTES_WRITTEN=64345 12/02/05 21:01:24 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=25 12/02/05 21:01:24 INFO mapred.JobClient: File Input Format Counters 12/02/05 21:01:24 INFO mapred.JobClient: Bytes Read=25 12/02/05 21:01:24 INFO mapred.JobClient: Map-Reduce Framework 12/02/05 21:01:24 INFO mapred.JobClient: Map output materialized bytes=61 12/02/05 21:01:24 INFO mapred.JobClient: Map input records=2 12/02/05 21:01:24 INFO mapred.JobClient: Reduce shuffle bytes=61 12/02/05 21:01:24 INFO mapred.JobClient: Spilled Records=8 12/02/05 21:01:24 INFO mapred.JobClient: Map output bytes=41 12/02/05 21:01:24 INFO mapred.JobClient: CPU time spent (ms)=2900 12/02/05 21:01:24 INFO mapred.JobClient: Total committed heap usage (bytes)=398852096 12/02/05 21:01:24 INFO mapred.JobClient: Combine input records=4 12/02/05 21:01:24 INFO mapred.JobClient: SPLIT_RAW_BYTES=210 12/02/05 21:01:24 INFO mapred.JobClient: Reduce input records=4 12/02/05 21:01:24 INFO mapred.JobClient: Reduce input groups=3 12/02/05 21:01:24 INFO mapred.JobClient: Combine output records=4 12/02/05 21:01:24 INFO mapred.JobClient: Physical memory (bytes) snapshot=422445056 12/02/05 21:01:24 INFO mapred.JobClient: Reduce output records=3 12/02/05 21:01:24 INFO mapred.JobClient: Virtual memory (bytes) snapshot=1544007680 12/02/05 21:01:24 INFO mapred.JobClient: Map output records=4 查看结果: [root hadoop-0.20.205.0]# bin/hadoop fs -cat out/* hadoop1 hello2 world1 cat: File does not exist: /user/root/out/_logs 将结果从HDFS复制到本地并查看: [root hadoop-0.20.205.0]# bin/hadoop fs -get out output [root hadoop-0.20.205.0]# cat output/* cat: output/_logs: Is a directory hadoop1 hello2 world1 此时,从JobTracker网页中也可以看到任务的执行情况: 本文转自feisky博客园博客,原文链接:http://www.cnblogs.com/feisky/archive/2012/02/05/2339311.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

springboot + redis(单机版)

本次和大家分享的是在springboot集成使用redis,这里使用的是redis的jedis客户端,如下添加依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> 然后需要redis的相关配置(这里我的redis密码是空) spring: redis: single: 192.168.146.28:6378 jedis: pool: max-idle: 8 max-active: 8 max-wait: 3000 timeout: 3000 password: 这是redis的一般配置,具体调优可以设置这些参数,下面在JedisConfig类中读取这些设置 @Value("${spring.redis.single}") private String strSingleNode; @Value("${spring.redis.jedis.pool.max-idle}") private Integer maxIdle; @Value("${spring.redis.jedis.pool.max-active}") private Integer maxActive; @Value("${spring.redis.jedis.pool.max-wait}") private Integer maxAWait; @Value("${spring.redis.timeout}") private Integer timeout; @Value("${spring.redis.password}") private String password; 有上面的配置,就需要有代码里面设置下,这里创建一个返回JedisPoolConfig的方法 /** * jedis配置 * * @return */ public JedisPoolConfig getJedisPoolConfig() { JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(maxIdle); #最大空闲数 config.setMaxWaitMillis(maxAWait); #最大等待时间 config.setMaxTotal(maxActive); #最大连接数 return config; } 有了配置,接下来就创建JedisPool,这里把JedisPool托管到spring中 /** * 获取jedispool * * @return */ @Bean public JedisPool getJedisPool() { JedisPoolConfig config = getJedisPoolConfig(); System.out.println("strSingleNode:" + this.strSingleNode); String[] nodeArr = this.strSingleNode.split(":"); JedisPool jedisPool = null; if (this.password.isEmpty()) { jedisPool = new JedisPool( config, nodeArr[0], Integer.valueOf(nodeArr[1]), this.timeout); } else { jedisPool = new JedisPool( config, nodeArr[0], Integer.valueOf(nodeArr[1]), this.timeout, this.password); } return jedisPool; } 上面简单区分了无密码的情况,到此jedis的配置和连接池就基本搭建完了,下面就是封装使用的方法,这里以set和get为例;首先创建个JedisComponent组件,代码如下 /** * Created by Administrator on 2018/8/18. */ @Component public class JedisComponent { @Autowired JedisPool jedisPool; public boolean set(String key, String val) { Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.set(key, val).equalsIgnoreCase("OK"); } finally { if (jedis != null) { jedis.close(); } } } public <T> boolean set(String key, T t) { String strJson = JacksonConvert.serilize(t); if (strJson.isEmpty()) { return false; } return this.set(key, strJson); } public String get(String key) { Jedis jedis = null; try { jedis = jedisPool.getResource(); return jedis.get(key); } finally { if (jedis != null) { jedis.close(); } } } public <T> T get(String key, Class<T> tClass) { String strJson = this.get(key); return JacksonConvert.deserilize(strJson, tClass); } } 有了对jedis的调用封装,我们在Controller层的测试用例如下 @Autowired JedisComponent jedis; @GetMapping("/setJedis/{val}") public boolean setJedis(@PathVariable String val) { return jedis.set("token", val); } @GetMapping("/getJedis") public String getJedis() { return jedis.get("token"); } 运行set和get的接口效果如

优秀的个人博客,低调大师

在Ubuntu上单机安装Hadoop

最近大数据比较火,所以也想学习一下,所以在虚拟机安装Ubuntu Server,然后安装Hadoop。 以下是安装步骤: 1. 安装Java 如果是新机器,默认没有安装java,运行java –version命名,看是否可以查看Java版本,如果未安装Java,这运行以下命名: # Update the source list $ sudo apt-get update # The OpenJDK project is the default version of Java # that is provided from a supported Ubuntu repository. $ sudo apt-get install default-jdk $ java -version 2.设置Hadoop用户和组 $sudo addgroup hadoop $ sudo adduser --ingroup hadoop hduser 3.安装并配置SSH $ sudo apt-get install ssh $ su hduser $ ssh-keygen -t rsa -P "" cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 接下来运行ssh命令,测试一下是否成功. $ ssh localhost 4.安装Hadoop 首先需要下载并解压Hadoop文件,运行命令: $wgethttp://apache.spinellicreations.com/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz 这里的URL是最新的Hadoop2.6.0版,安装的时候可以先到官方网站看看需要下载哪个版本,然后更换这个Url. 下载完毕后,就是解压缩: $ tar xvzf hadoop-2.6.0.tar.gz 然后将Hadoop文件夹搬到新文件夹,并且给hduser这个用户权限: $ sudo mv hadoop-2.6.0 /usr/local/hadoop $ cd /usr/local $ sudo chown -R hduser:hadoop hadoop 5.配置Hadoop 接下来我们可以使用putty通过ssh连接到Ubuntu了,将当前用户切换到hduser做如下的操作: 5.1修改~/.bashrc文件 首先运行命令查看Java的路径: $ update-alternatives --config java There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java Nothing to configure. 这里我们需要的JavaHome就是:/usr/lib/jvm/java-7-openjdk-amd64,【注意,这里没有后面的/jre/bin/java部分】,然后使用vi编辑~/.bashrc #HADOOP VARIABLES START export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 export HADOOP_INSTALL=/usr/local/hadoop export PATH=$PATH:$HADOOP_INSTALL/bin export PATH=$PATH:$HADOOP_INSTALL/sbin export HADOOP_MAPRED_HOME=$HADOOP_INSTALL export HADOOP_COMMON_HOME=$HADOOP_INSTALL export HADOOP_HDFS_HOME=$HADOOP_INSTALL export YARN_HOME=$HADOOP_INSTALL export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib/native" #HADOOP VARIABLES END 5.2修改hadoop-env.sh文件 文件的路径为:/usr/local/hadoop/etc/hadoop/hadoop-env.sh,找到对应的行,将内容改为: export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 5.3修改core-site.xml文件 在修改这个文件之前,我们需要使用超级用户创建一个目录,并给予hduser该目录的权限: $ sudo mkdir -p /app/hadoop/tmp $ sudo chown hduser:hadoop /app/hadoop/tmp 接下来切换回hduser用户,修改配置文件,文件路径:/usr/local/hadoop/etc/hadoop/core-site.xml,使用VI,将配置改为: <configuration> <property> <name>hadoop.tmp.dir</name> <value>/app/hadoop/tmp</value> <description>A base for other temporary directories.</description> </property> <property> <name>fs.default.name</name> <value>hdfs://localhost:54310</value> <description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri's scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri's authority is used to determine the host, port, etc. for a filesystem.</description> </property> </configuration> 5.4修改mapred-site.xml 默认情况下,我们只有/usr/local/hadoop/etc/hadoop/mapred-site.xml.template,我们需要先基于这个文件,copy一个新的文件出来,然后再进行修改。 $ cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml 使用VI打开,修改配置如下: <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:54311</value> <description>The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task. </description> </property> </configuration> 5.5修改hdfs-site.xml文件 在修改之前,也是需要切换回超级管理员账户,创建需要用到的目录: $ sudo mkdir -p /usr/local/hadoop_store/hdfs/namenode $ sudo mkdir -p /usr/local/hadoop_store/hdfs/datanode $ sudo chown -R hduser:hadoop /usr/local/hadoop_store 然后切换回来hduser用户,修改配置文件:/usr/local/hadoop/etc/hadoop/hdfs-site.xml,改为: <configuration> <property> <name>dfs.replication</name> <value>1</value> <description>Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time. </description> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop_store/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop_store/hdfs/datanode</value> </property> </configuration> 6.格式化HDFS $ hadoop namenode –format 如果发现hadoop这个命令不认识,那是因为环境变量没有载入,最简单办法就是登出,然后再登入hduser就可以了。这个命令会删掉所有已经存在的数据,所以如果已经有数据的情况下,慎用这个命令。 7.启动Hadoop 首先启用无密码的ssh。不然接下来启动的时候会不断的提示输入密码,很烦人。 ssh-keygen -t rsa 默认位置,无密码生成密钥。 chmod 755 ~/.ssh cd ~/.ssh cat id_rsa.pub >> authorized_keys 接下来我们试一下使用ssh连接本地,看能连接成功不: ssh localhost 接下来是启动Hadoop的服务。 使用$ start-all.sh就可以启动Hadoop了,判断是否启动成功,我们可以运行jps命令,我们可以看到如下的结果,说明已经启动成功了: $ jps 2149 SecondaryNameNode 1805 NameNode 2283 ResourceManager 1930 DataNode 2410 NodeManager 2707 Jps 另外,我们可以访问Hadoop的Web,地址是: http://serverIP:50070/ 8.关闭Hadoop 运行命令: $ stop-all.sh 好了,终于在虚拟机中将Hadoop搭建成功。整个操作过程参考了另一篇博客: http://www.bogotobogo.com/Hadoop/BigData_hadoop_Install_on_ubuntu_single_node_cluster.php 我只是把其中需要注意的几个地方重新说明了一下,借花献佛。 本文转自深蓝居博客园博客,原文链接:http://www.cnblogs.com/studyzy/p/4389891.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Centos7单机部署ELK

一、简介 1.1介绍 ELK是三个开源工具组成,简单解释如下: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。 Kibana 也是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。 1.2场景分析 日志主要包括系统日志、应用程序日志和安全日志等等。运维人员和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。 通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。 集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。 这里采用开源实时日志分析ELK平台能够完美的解决我们上述的问题,当然也还有别的平台或者工具可以使用,这里只讨论ELK,官方网站:https://www.elastic.co 二、安装Elasticsearch 2.1安装jdk 1 2 3 4 # java -version java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8 . 0_121 - b13) Java HotSpot(TM) 64 - Bit Server VM (build 25.121 - b13, mixed mode) 2.2安装Elasticsearch 1 2 3 4 5 # tar -zxvf elasticsearch-5.6.3.tar.gz # mv elasticsearch-5.6.3 /data/elasticsearch # cd elasticsearch/config/ # 备份配置文件 # cp elasticsearch.yml elasticsearch.yml.bak 编辑配置文件 1 2 3 4 5 6 7 8 9 # cat elasticsearch.yml | grep -v ^# cluster.name: elk - application node.name: node - 1 path.data: / data / elasticsearch / data path.logs: / data / elasticsearch / logs network.host: 172.16 . 220.248 http.port: 9200 discovery.zen.ping.unicast.hosts: [ "node-1" ] discovery.zen.minimum_master_nodes: 1 添加elasticsearch用户,不能使用root启动 1 2 3 # groupadd -g 1008 elasticsearch # useradd -g 1008 -u 1008 elasticsearch # chown -R elasticsearch:elasticsearch /data/elasticsearch/ 修改sysctl.conf文件 1 2 3 4 # vim /etc/sysctl.conf vm.max_map_count = 262144 # sysctl -p 修改/etc/security/limits.conf文件,修改打开文件句柄 1 2 3 4 * soft nofile 100000 * hard nofile 100000 * soft nproc 100000 * hard nproc 100000 添加hosts文件 1 2 # vim /etc/hosts 172.16 . 220.248 node - 1 启动 1 2 3 # su -s elasticsearch # cd /data/elasticsearch/bin # ./elasticearch & 查看是否启动 简单的curl测试 1 # curl http://172.16.220.248:9200 三、安装Logstash和filebeat filebeat用于在各个服务器上获取数据,发送到logstash上,再由logstash处理数据。 3.1安装logstash 1 2 # tar -zxvf logstash-5.6.3.tar.gz # mv logstash-5.6.3 /data/logstash 3.2安装filebeat 下载filebeat并启动,通过它来监听数据源文件的新增内容经过logstash处理后上传到es里面 1 2 3 4 # tar -zxvf filebeat-5.6.3-linux-x86_64.tar.gz # mv filebeat-5.6.3-linux-x86_64 /data/filebeat # cd /data/filebeat # cp filebeat.yml filebeat.yml.bak 编辑filebeat.yml文件 1 2 3 4 5 6 filebeat.prospectors: - input_type: log paths: - / var / log / message - log # 测试本机的一个log文件 output.logstash: hosts: [ "172.16.220.248:5044" ] 启动filebeat服务 1 2 # cd /data/filebeat # ./filebeat & 查看启动,filebeat没有监听端口,主要看日志和进程 1 2 # tialf logs/filebeat # ps -ef | grep filebeat filebeat监听的文件记录信息在/data/filebeat/data/registry 新建一个本地文件message-log,可以取几条本机系统的messages文件 3.3启动logstash 最后新建一个logstash的启动指定test.conf配置文件,内容如下: 1 2 3 4 5 6 7 8 9 10 11 input { beats { port = > "5044" } } output { elasticsearch { hosts = > "172.16.220.248:9200" } stdout { codec = > rubydebug } # 这是将输出打印在屏幕上,可以注释掉 } Logstash默认有input、filter、output三个区域,一般最少需要配置input和output即可! logstash的本身默认的logstash.yml配置文件选择不修改即可! 简单测试一下logstash不指定配置文件启动 1 2 # cd /data/filebeat/bin # ./logstash -e 'input { stdin {} } output {stdout {} }' 我们手动输入hello world,它也会输出 hello world 指定配置文件启动logstash 1 # ./logstash -f ../config/test.conf & 查看5044端口和9600端口是否开启 等待一会后应该会出现如下信息输出,这也就是test.conf里面最后一行定义输出到屏幕上 四、安装kibana 1 2 3 4 # tar -zxvf kibana-5.6.3-linux-x86_64.tar.gz # mv kibana-5.6.3-linux-x86_64 /data/kinbana # cd /data/kinbana/config/ # cp kibana.yml kibana.yml.bak 编辑kibana.yml配置文件 1 2 3 4 # vim kibana.yml server.port: 5601 server.host: "172.16.220.248" elasticsearch.url: "http://172.16.220.248:9200" 启动kinbana 1 2 # cd /data/kibana/bin # ./kibana & 查看端口 浏览器登入查看 点击create按钮后,然后点击上面的discover按钮,注意如果没数据的话,注意看看导入的时间@timestamp和现在的时间对比一下,kibana默认只显示最近15分钟的数据,如果超出15分钟请选择适当的时间,从kibana可以看到messages-log里面的15条数据都正常导入了。这就也完成我们的实现的第一个效果。但是这仅仅是把流程跑通了,接下来我们需要做的事情还有更多。注意只能先导入数据到es后才能在kibana创建索引。 五、获取Nginx access日志 Nginx日志格式在logstash的grok里面默认是没有的,需要我们手动配置,可以通过http://grokdebug.herokuapp.com/在线工具来判断配置是否正确。 5.1 在nginx服务器上安装filebeat 服务器: 172.16.200.160 1 2 3 4 # tar -zxvf filebeat-5.6.3-linux-x86_64.tar.gz # mv filebeat-5.6.3-linux-x86_64 /data/filebeat # cd /data/filebeat # cp filebeat.yml filebeat.yml.bak 修改filebeat配置文件 1 2 3 4 5 6 7 8 # cat filebeat.yml | grep -v ^$ | grep -v ^# | grep -v "#" filebeat.prospectors: - input_type: log paths: - /data/nginx/logs/160_access.log document_type: nginx_access output.logstash: hosts: ["172.16.220.248:5044"] 启动filebeat 1 # ./filebeat & 5.2 重新配置logstash启动配置文件 nginx日志格式,根据业务要求,我们这做了一些修改,比如增加cookie等,修改access.log日志时间格式等,这个会在另外的博客中写出来,会给出链接的。 nginx日志中添加cookie信息 nginx改变access.log中的时间格式 Nginx日志格式 1 2 3 4 5 6 7 8 log_format main '[$time_local] - $remote_addr:$remote_port - $upstream_addr $upstream_status $upstream_response_time - ' '"$request" $status $bytes_sent $request_time ' '"$http_referer" - "$http_user_agent" - ' '"$customerTag_cookie" - "$ym_cookie" - "$http_cookie" ' '"$http_x_forwarded_for"'; # 这里只是我们自己的格式,各位可以根据自己要求增删 grok使用表达式 可能我理解不是很到位,写的也比较复杂,我会把匹配对应项一一写出来,大家可以自己理解,然后为自己的项目配置 1 %{SYSLOG5424SD} - %{IPV4:clientip}:%{NUMBER:clientport} - %{IPV4:hostip}:%{NUMBER:itemport} %{INT:upstream_status} %{NUMBER:response_time} - \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{INT:status} %{INT:body_bytes_sent} %{NUMBER:request_time} %{QS:url} - %{QS:user_agent} - %{QS:customerTag} - %{QS:ym_traffic_session_id} - %{QS:all_cookies} %{IPV4:realip} grok匹配说明 1 %{SYSLOG5424SD} 时间格式 1 %{IPV4:clientip} 获取ip,clientip是自己命名的 1 %{NUMBER:clientport} NUMBER匹配数字 1 %{INT:upstream_status} INT整形 1 %{WORD:method} WORD单词 1 %{URIPATHPARAM:request} 获取请求内容request 1 %{QS:url} QS可以获取一段字符串 修改logstash启动配置文件 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 input { beats { port => "5044" } } filter { if [type] == "nginx_access" { grok { match => {"message" => "%{SYSLOG5424SD} - %{IPV4:clientip}:%{NUMBER:clientport} - %{IPV4:hostip}:%{NUMBER:itemport} %{INT:upstream_status} %{NUMBER:response_time} - \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{INT:status} %{INT:body_bytes_sent} %{NUMBER:request_time} %{QS:url} - %{QS:user_agent} - %{QS:customerTag} - %{QS:ym_traffic_session_id} - %{QS:all_cookies} %{IPV4:realip}"} } mutate { remove_field => "message" # 把message字段去掉,它会将上面单项获取的信息做个汇总,这样就重复了 } } } output { elasticsearch { hosts => "172.16.220.248:9200" } #stdout { codec => rubydebug } } 测试一下配置文件 1 ./logstash -t -f ../config/logstash.conf 重启logstash 不出问题elasticsearch 和kibana中就会有数据了

优秀的个人博客,低调大师

ELK日志分析单机系统详解

日志分析ELK平台,由ElasticSearch、Logstash和Kiabana三个开源工具组成。 官方网站:https://www.elastic.co/products Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。 Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。 ELK原理图: 如图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。 ELK平台搭建 系统环境 System: Centos release 6.7(Final) ElasticSearch: elasticsearch-5.3.1.tar.gz Logstash: logstash-5.3.1.tar.gz Kibana: kibana-5.3.1-linux-x86_64.tar.gz Java: openjdk version ”1.8.0_131″ ELK官网下载:https://www.elastic.co/downloads/ JAVA环境配置 下载最新版本1.8.0_131 cd /tmp/ wgethttp://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz tar zxfjdk-8u131-linux-x64.tar.gz -C /usr/local/ vim /etc/profile 添加如下内容 JAVA_HOME=/usr/local/jdk1.8.0_131 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME PATH CLASSPATH source /etc/profile ElasticSearch配置 wgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.1.tar.gz useradd elktest tar-zxvfelasticsearch-5.3.1.tar.gz cdelasticsearch-5.3.1 viconfig/elasticsearch.yml 修改以下配置项: (路径需要先自行创建,并且elktest用户可读写) cluster.name:elk_cluster node.name:node0 path.data:/tmp/elasticsearch/data path.logs:/tmp/elasticsearch/logs network.host: 192.168.1.5 http.port:9200 其他的选项保持默认,然后启动ES: su elktest#ES不允许root启动服务 必须是普通用户 ./bin/elasticsearch& 配置Logstash wgethttps://artifacts.elastic.co/downloads/logstash/logstash-5.3.1.tar.gz tar-zxvflogstash-5.3.1.tar.gz cdlogstash-5.3.1 viconfig/test_es.conf input { file { path => "/tmp/test.log" #测试文件 } } filter { } output { stdout { codec => rubydebug } elasticsearch { index => "test_%{+YYYY.MM.dd}"#索引信息 hosts => [ "192.168.1.5:9200" ] } } ./bin/logstash -f config/test_es.conf &#启动服务 配置Kibana: wgethttps://artifacts.elastic.co/downloads/kibana/kibana-5.3.1-linux-x86_64.tar.gz tar-zxvfkibana-5.3.1-linux-x86.tar.gz cdkibana-5.3.1-linux-x86 viconfig/kibana.yml server.port:5601 server.host:"192.168.1.5" elasticsearch.url:http://192.168.1.5:9200 kibana.index:".kibana.yml" ./bin/kibana 部署中的常见错误及解决方法 1、启动elasticsearch 如出现异常 can not run elasticsearch as root 解决方法:创建ES 账户,修改文件夹 文件 所属用户 组 2、启动异常:ERROR: bootstrap checks failed system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk 解决方法:在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面: bootstrap.memory_lock: false bootstrap.system_call_filter: false 3、启动后,如果只有本地可以访问,尝试修改配置文件 elasticsearch.yml 中network.host(注意配置文件格式不是以 # 开头的要空一格, : 后要空一格) 为 network.host: 0.0.0.0 默认端口是 9200 注意:关闭防火墙 或者开放9200端口 4、ERROR: bootstrap checks failed max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536] max number of threads [1024] for user [lishang] likely too low, increase to at least [2048] 解决方法:切换到root用户,编辑limits.conf 添加类似如下内容 vi /etc/security/limits.conf 添加如下内容: * soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096 5、max number of threads [1024] for user [lish] likely too low, increase to at least [2048] 解决方法:切换到root用户,进入limits.d目录下修改配置文件。 vi /etc/security/limits.d/90-nproc.conf 修改如下内容: * soft nproc 1024 #修改为 * soft nproc 2048 6、max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144] 解决方法:切换到root用户修改配置sysctl.conf vi /etc/sysctl.conf 添加下面配置: vm.max_map_count=655360 并执行命令: sysctl -p 然后,重新启动elasticsearch,即可启动成功。 本文转自super李导51CTO博客,原文链接:http://blog.51cto.com/superleedo/1918771,如需转载请自行联系原作者

优秀的个人博客,低调大师

Pika 3.4.0 发布,从单机到集群

pika 3.4.0 发布了。pika 是 360 公司发布一个可持久化的大容量 redis 存储服务,兼容 string、hash、list、zset、set 的绝大部分接口,解决 redis 由于存储数据量巨大而导致内存不够用的容量瓶颈。360 推出原生分布式 pika 集群,发布 pika 3.4.0,pika 原生集群不再需要额外部署 codis-proxy 模块。 新增功能: sharding 模式下内置 pika proxy 组件,自动代理客户端请求到响应 slot 节点。 proxy 支持根据业务压力配置后端连接数。 proxy 支持后端连接自动保活机制。 proxy 支持slot 共享后端连接。 proxy 支持客户端 pipline 功能。 proxy 支持 slot 主从切换,slot 数据迁移功能。 proxy 支持 hash tag 功能。用户可以通过 hash tag 把 key 存储到指定的 slot。 pika 支持 protocol buf 管理接口。 注意事项: 分片模式和经典模式不可兼容,请在启动时候配置好启动模式 副本一致性可配置功能目前只支持分片模式。 分片模式下取消 slaveof 命令,使用 pkcluster slotsslaveof 替代,详细见Pika 分片命令 经典模式下取消info log命令,info log的 binlog offset 移至 info replication,info log的 binlog size 移至 info data 分片模式下取消info replication命令,用pkcluster info slot替代 由于redis-cli 对于数据展示格式限制,对于 pkcluster info slot 的数据展示格式不够人性化。可以自行修改 redis-cli 代码redis-cli modification pika 从 2.1.4 推荐需要使用 gcc 4.8+ 版本编译,更新 gcc 后执行 make distclean && make 编译 pika3.1.0 版本之后不再支持双主 pika3.1.0 版本使用 pb 协议进行内部通信,不能直接和之前的版本建立主从关系,由低版本升级到 pika3.1.0 可以参照 wiki 进行升级(如何升级到 Pika3.0、如何升级到 Pika3.1) 由于 zset 精度的优化(自 pika3.0.0 起zset 精度已与 redis 一致),如果你在低版本的 pika(<3.0.0)中使用了 geo 功能,请在将其升级到 pika3.0 时不要直接使用 nemo_to_blackwidow 工具进行 geo 相关 zset(其它结构的数据不受影响)数据的迁移,否则由于精度差异问题,迁移后的 geo 数据将损坏,建议使用客户端将 geo 相关 zset 数据重新导入。 3.3.0 以后的版本包含了日志复制一致性的功能,建议使用该功能的用户使用版本 3.3.6。 为了保证服务的稳定,建议不使用日志复制一致性的用户升级至 3.2.9。 目前停止对 3.0 版本的维护 发布说明:https://github.com/Qihoo360/pika/releases 相关阅读:https://my.oschina.net/u/4063048/blog/4763385

优秀的个人博客,低调大师

Hadoop HBase 单机环境简单配置教程

写在前面:Hadoop是Apache的一个项目,它是一个实现了MapReduce计算模型的可以运用于大型集群并行计算的分布式并行计算编程框架,当然分布式计算离不开分布式存储,Hadoop框架包含了分布式存储系统HDFS(Hadoop Distributed File System),其存储和数据结构很类似Google的GFS。 HBase是Hadoop的子项目,它是基于Hadoop HDFS分布存储系统的一个Google BigTable开源实现(最近看了BigTable的Paper,很受鼓舞和启发),它在存储数据结构上并非关系型,而是疏松分布式的,持久并按多维排序并索引的map型,下次我把介绍BigTable和HBase的文章转载过来。在初接触Hadoop和Hbase的时候,大多数技术人员只希望通过简单的方法初步搭起框架环境,但我找了好多安装手册都是上来就部署集群分布环境(尽管做Hadoop就是为了这个目的),搭建集群环境的时候要设置ssh协议访问权限,要生成访问公钥,并且slaves配置上的小错误也会导致整个部署问题重重,所以我在部署成功后记录下最简单运行的standalone模式的安装配置过程,希望初学者在需要的时候能找到这个小小的guide,以后有时间我会再把集群配置的方法写出来。 开始: 1.在Apache/Hadoop项目的网站(hadoop.apache.org/)下载hadoop以及hbase的发行包,此处两个发行包的大版本号一定要一致,譬如都是0.18版本:hadoop-0.18.2.tar.gzhbase-0.18.1.tar.gz 2.使用root身份登录目标服务器系统(Suse10 Linux),首先安装java虚拟机,这个比较简单,随便找个绿色的解压就可以了,在这个例子里面我使用IBM WAS6.1附带的jdk,它的home目录是/opt/IBM/WebSphere/AppServer/java,我们只需要配置系统的环境变量就可以了. 编辑全局环境变量文件/etc/profile,在文件后面添加 export JAVA_HOME=/opt/IBM/WebSphere/AppServer/java export PATH=$JAVA_HOME:$PATH 保存profile文件后使用 $source /etc/profile 命令重新加载profile,然后随便在一个目录下面运行 $java -version 查看javahome环境变量和path变量是否被正确加载. 另外到 /etc/hosts 文件中查看主机映射是否存在,例如 127.0.0.1 localhost 或者什么其他的名字,在这里默认配置本机为localhost,如果需要做分布式的话,本机要做namenode,所以要把所有的datanode的host添加到这里面. 3.创建hadoop用户, $useradd hadoop 可以用 $passwd hadoop 修改hadoop用户的登录密码. 4.创建hadoop用户的home目录,如果打算在别处安装hadoop/hbase的话可以不这样做,这里我们默认将hadoop/hbase安装在/home/${username}目录下. $cd /home $mkdir hadoop 将目录用户指派给hadoop $chown hadoop hadoop 改变目录权限,这里我们配大一些,其实只要644就足够了: $chmod 755 hadoop 5.使用hadoop用户登录系统,将下载的两个发行包文件传到/home/hadoop目录下面,然后给它们加上执行权限: $chmod a+x hadoop-0.18.2.tar.gz $chmod a+x hbase-0.18.1.tar.gz 6.解压hadoop: $tar zxvf hadoop-0.18.2.tar.gz 这样做会在/home/hadoop目录下解压hadoop发行包并创建到/home/hadoop/hadoop-0.18.2目录中,这里可以详细设计目录结构并创建link文件来方便日后升级等工作,这里我们先简单放在这里. 7.修改hadoop环境脚本: 修改文件/home/hadoop/hadoop-0.18.2/conf/hadoop-env.sh,在其中加入JAVA_HOME变量: export JAVA_HOME=/opt/IBM/WebSphere/AppServer/java HADOOP_HOME变量我们可以不设置,默认的情况是指定HADOOP_HOME为运行启动脚本当前目录的父目录. 8.修改hadoop启动配置: 参照默认配置文件/home/hadoop/hadoop-0.18.2/conf/hadoop-default.xml 修改用户配置文件/home/hadoop/hadoop-0.18.2/conf/hadoop-site.xml,hadoop启动的时候会加载默认配置文件,然后读取用户配置文件并使用用户配置文件中的属性替换默认配置文件中的值,这里最简单的情况我们只需要修改如下几项即可,如果需要做分布的话也是要在这个文件里面进行配置.将要修改的配置项简单的放到hadoop-site.xml文件的<configuration/>中去: <configuration><property><name>fs.default.name</name><value>hdfs://localhost:9000/</value></property><property><name>mapred.job.tracker</name><value>localhost:9001</value></property> </configuration> 9.格式化nodename及启动hdfs守护进程: $/home/hadoop/hadoop-0.18.2/bin/hadoop namenode -format $/home/hadoop/hadoop-0.18.2/bin/start-all.sh 使用shart-all.sh可以方便的启动所有的hdfs守护进程,如果想关闭这些守护进程可以使用stop-all.sh脚本. 启动过程中需要输入登录密码. 启动成功后可以用以下简单方法测试hdfs: $/home/hadoop/hadoop-0.18.2/bin/hadoop dfs -mkdir dir4test $/home/hadoop/hadoop-0.18.2/bin/hadoop dfs -ls $/home/hadoop/hadoop-0.18.2/bin/hadoop dfs -put /home/hadoop/file4test.zip file4test_temp.zip 相当于linux系统下的mkdir ls cp命令. 用浏览器访问 http://localhost:50030/ 和 http://localhost:50070/ 可以查看hdfs拓扑结构和job进程还有hdfs文件系统结构. 10.解压hbase发行包: $tar zxvf hbase-0.18.1.tar.gz 11.修改hbase环境脚本: 修改文件/home/hadoop/hbase-0.18.1/conf/hbase-env.sh,在其中加入JAVA_HOME变量: export JAVA_HOME=/opt/IBM/WebSphere/AppServer/java 简单启动暂时不需要在用户配置文件/home/hadoop/hbase-0.18.1/conf/hbase-site.xml添加任何替代属性. 12.启动hbase: $/home/hadoop/hbase-0.18.1/bin/start-hbase.sh 成功启动hbase的守护进程. 启动hbase hql shell: $/home/hadoop/hbase-0.18.1/bin/hbase shell 在hql shell中可以进行hbase数据操作,如果需要帮助信息可以键入: hbase>help 简单测试hbase: 在hbase shell下: hbase>create 't1','f1','f3' hbase>list 使用浏览器访问 http://localhost:60010/ 可以查看当前hbase信息. 启动hbase REST服务: $/home/hadoop/hbase-0.18.1/bin/hbase rest start 成功启动hbase REST服务后就可以通过对uri: http://localhost:60050/api/ 的通用REST操作(GET/POST/PUT/DELETE)实现对hbase的REST形式数据操作. To be continue... 本文作者:MAZHE 来源:51CTO

优秀的个人博客,低调大师

OpenStack组件Swift单机搭建(基于Keystone)

安装环境:Ubuntu 16.04 需要有两块硬盘(一块为系统盘,一块用于安装SWIFT) 需要有IP地址 环境准备 修改hosts文件 安装相关服务 修改hosts 编辑 /etc/hosts,添加 IP地址 controller 安装Openstack源并更新和安装 apt install software-properties-common add-apt-repository cloud-archive:newton apt update && apt dist-upgrade 安装完成后重启 安装Openstack客户端 apt install python-openstackclient 安装数据库 1、安装数据库服务 apt install mariadb-server python-pymysql 2、创建或修改/etc/mysql/mariadb.conf.d/99-openstack.cnf文件 (若文件存在则修改,不存在则创建,存在的文件中若未提及的选项则保持不变,下同) [mysqld] bind-address = 你的IP地址 default-storage-engine = innodb innodb_file_per_table max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8 3、将/etc/mysql/mariadb.conf.d/下所有的文件中所有utf8mb4改为utf84、进入数据库,设置root密码,添加远程登录权限 # mysql -u root mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' \ IDENTIFIED BY 'root密码'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' \ IDENTIFIED BY 'root密码'; mysql> flush privileges; mysql> exit; 5、重启数据库 service mysql restart 安装消息队列服务(Message Queue) 1、安装服务 apt install rabbitmq-server 2、添加openstack用户并添加权限 rabbitmqctl add_user openstack 设置一个密码 rabbitmqctl set_permissions openstack ".*" ".*" ".*" 安装分布式缓存服务(Memcached) 1、安装服务 apt install memcached python-memcache 2、修改配置文件/etc/memcached.conf -l 你的IP地址 3、重启服务 service memcached restart 安装配置Keystone,并添加域、项目、用户和角色 准备 1、添加Keystone数据库和相关用户 # mysql -u root -p Create the keystone database: mysql> CREATE DATABASE keystone; mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ IDENTIFIED BY 'Keystone密码'; mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ IDENTIFIED BY 'Keystone密码'; 2、安装服务 apt install keystone 配置Keystone 1、编辑/etc/keystone/keystone.conf [database] connection = mysql+pymysql://keystone:'keystone用户的密码'@controller/keystone [token] provider = fernet 2、填充keystone数据库启动mariadb远程访问 sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/50-server.cnf su -s /bin/sh -c "keystone-manage db_sync" keystone 3、初始化Fernet key repositories(似乎是个专有名词不知道咋翻译) keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone keystone-manage credential_setup --keystone-user keystone --keystone-group keystone 4、对认证服务进行引导 keystone-manage bootstrap --bootstrap-password 设置一个admin密码 \ --bootstrap-admin-url http://controller:35357/v3/ \ --bootstrap-internal-url http://controller:35357/v3/ \ --bootstrap-public-url http://controller:5000/v3/ \ --bootstrap-region-id RegionOne 配置Apache HTTP服务 1、编辑/etc/apache2/apache2.conf ServerName controller 2、重启apache服务,并且删除SQLite数据库 service apache2 restart rm -f /var/lib/keystone/keystone.db 3、添加一些环境变量(临时的哦) export OS_USERNAME=admin export OS_PASSWORD=这里写你刚才设置的admin的密码 export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=default export OS_PROJECT_DOMAIN_NAME=default export OS_AUTH_URL=http://controller:35357/v3 export OS_IDENTITY_API_VERSION=3 创建域、项目、用户和角色 1、创建一个service项目 openstack project create --domain default \ --description "Service Project" service 2、创建一个demo项目和user创建demo项目 openstack project create --domain default \ --description "Service Project" service 创建demo用户 openstack project create --domain default \ --description "Demo Project" demo openstack user create --domain default \ --password-prompt demo(输入此句后会需要设置demo的密码) 创建user角色 openstack role create user 添加user角色到demo项目和用户中 openstack role add --project demo --user demo user 验证操作 1、基于安全的考虑在/etc/keystone/keystone-paste.ini中移除 [pipeline:public_api], [pipeline:admin_api],[pipeline:api_v3] 中的admin_token_auth 2、移除掉一些环境变量 unset OS_AUTH_URL OS_PASSWORD 3、以admin用户的身份请求一个认证令牌 openstack --os-auth-url http://controller:35357/v3 \ --os-project-domain-name default --os-user-domain-name default \ --os-project-name admin --os-username admin token issue (会要求输入admin的密码) 如果出现类似于以下的信息则表示成功 +------------+-----------------------------------------------------------------+ | Field | Value | +------------+-----------------------------------------------------------------+ | expires | 2016-02-12T20:14:07.056119Z | | id | gAAAAABWvi7_B8kKQD9wdXac8MoZiQldmjEO643d-e_j-XXq9AmIegIbA7UHGPv | | | atnN21qtOMjCFWX7BReJEQnVOAj3nclRQgAYRsfSU_MrsuWb4EDtnjU7HEpoBb4 | | | o6ozsA_NmFWEpLeKy0uNn_WeKbAhYygrsmQGA49dclHVnz-OMVLiyM9ws | | project_id | 343d245e850143a096806dfaefa9afdc | | user_id | ac3377633149401296f6c0d92d79dc16 | +------------+-----------------------------------------------------------------+ 3、以demo用户的身份请求一个认证令牌 openstack --os-auth-url http://controller:5000/v3 \ --os-project-domain-name default --os-user-domain-name default \ --os-project-name demo --os-username demo token issue (会要求输入demo的密码) 如果出现类似于以下的信息则表示成功 +------------+-----------------------------------------------------------------+ | Field | Value | +------------+-----------------------------------------------------------------+ | expires | 2016-02-12T20:14:07.056119Z | | id | gAAAAABWvi7_B8kKQD9wdXac8MoZiQldmjEO643d-e_j-XXq9AmIegIbA7UHGPv | | | atnN21qtOMjCFWX7BReJEQnVOAj3nclRQgAYRsfSU_MrsuWb4EDtnjU7HEpoBb4 | | | o6ozsA_NmFWEpLeKy0uNn_WeKbAhYygrsmQGA49dclHVnz-OMVLiyM9ws | | project_id | 343d245e850143a096806dfaefa9afdc | | user_id | ac3377633149401296f6c0d92d79dc16 | +------------+-----------------------------------------------------------------+ 写脚本 由于环境变量会失效(除非你设置在bashrc里面去了,不过这不利于更换用户身份)为了方便,可以创建一些脚本 1、创建admin-openrc文件 export OS_PROJECT_DOMAIN_NAME=default export OS_USER_DOMAIN_NAME=default export OS_PROJECT_NAME=admin export OS_USERNAME=admin export OS_PASSWORD=你的admin密码 export OS_AUTH_URL=http://controller:35357/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 2、创建demo-openrc文件 export OS_PROJECT_DOMAIN_NAME=default export OS_USER_DOMAIN_NAME=default export OS_PROJECT_NAME=demo export OS_USERNAME=demo export OS_PASSWORD=你的demo密码 export OS_AUTH_URL=http://controller:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 3、验证一下 source admin-openrc openstack token issue 如果出现类似于以下的信息则表示成功 +------------+-----------------------------------------------------------------+ | Field | Value | +------------+-----------------------------------------------------------------+ | expires | 2016-02-12T20:14:07.056119Z | | id | gAAAAABWvi7_B8kKQD9wdXac8MoZiQldmjEO643d-e_j-XXq9AmIegIbA7UHGPv | | | atnN21qtOMjCFWX7BReJEQnVOAj3nclRQgAYRsfSU_MrsuWb4EDtnjU7HEpoBb4 | | | o6ozsA_NmFWEpLeKy0uNn_WeKbAhYygrsmQGA49dclHVnz-OMVLiyM9ws | | project_id | 343d245e850143a096806dfaefa9afdc | | user_id | ac3377633149401296f6c0d92d79dc16 | +------------+-----------------------------------------------------------------+ 安装并配置Swift服务 环境准备 1、运行脚本 source admin-openrc 2、向Keystone添加swift相关信息 添加swift用户 openstack user create --domain default --password-prompt swift(此处要设置密码) 将admin角色加入到swift用户中 openstack role add --project service --user swift admin 添加swift服务实体 openstack service create --name swift \ --description "OpenStack Object Storage" object-store 添加对象存储服务API的端点(endpoints) openstack endpoint create --region RegionOne \ object-store public http://controller:8080/v1/AUTH_%\(tenant_id\)s openstack endpoint create --region RegionOne \ object-store internal http://controller:8080/v1/AUTH_%\(tenant_id\)s openstack endpoint create --region RegionOne \ object-store admin http://controller:8080/v1 3、安装相关服务 apt install swift swift-proxy python-swiftclient \ python-keystoneclient python-keystonemiddleware \ memcached \ swift swift-account swift-container swift-object 配置proxy服务 1、创建并进入/etc/swift文件夹2、下载proxy-server.conf curl -o /etc/swift/proxy-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/proxy-server.conf-sample?h=stable/newton 3、编辑proxy-server.conf [DEFAULT] bind_port = 8080 user = swift swift_dir = /etc/swift [pipeline:main] pipeline = catch_errors gatekeeper healthcheck proxy-logging cache container_sync bulk ratelimit authtoken keystoneauth container-quotas account-quotas slo dlo versioned_writes proxy-logging proxy-server [app:proxy-server] use = egg:swift#proxy account_autocreate = True [filter:keystoneauth] use = egg:swift#keystoneauth operator_roles = admin,user [filter:authtoken] paste.filter_factory = keystonemiddleware.auth_token:filter_factory auth_uri = http://controller:5000 auth_url = http://controller:35357 memcached_servers = controller:11211 auth_type = password project_domain_name = default user_domain_name = default project_name = service username = swift password = 你设置的swift密码 delay_auth_decision = True [filter:cache] use = egg:swift#memcache memcache_servers = controller:11211 配置存储相关服务 1、安装服务 apt install xfsprogs rsync 2、格式化硬盘为XFS格式 (如果不知道硬盘名,可使用fdisk -l查看) mkfs.xfs /dev/硬盘 3、创建挂载节点的文件目录 mkdir -p /srv/node/硬盘 4、在/etc/fstab中添加 /dev/硬盘 /srv/node/硬盘 xfs noatime,nodiratime,nobarrier,logbufs=8 0 2 5、挂载硬盘 mount /srv/node/硬盘 6、创建并编辑文件 /etc/rsyncd.conf mkdir /etc/rsyncd.conf uid = swift gid = swift log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid address = 你的IP [account] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/account.lock [container] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/container.lock [object] max connections = 2 path = /srv/node/ read only = False lock file = /var/lock/object.lock 7、编辑/etc/default/rsync RSYNC_ENABLE=true 8、启动rsync服务 service rsync start 9、下载配置文件 curl -o /etc/swift/account-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/account-server.conf-sample?h=stable/newton curl -o /etc/swift/container-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/container-server.conf-sample?h=stable/newton curl -o /etc/swift/object-server.conf https://git.openstack.org/cgit/openstack/swift/plain/etc/object-server.conf-sample?h=stable/newton 10、编辑/etc/swift/account-server.conf [DEFAULT] bind_ip = 你的IP bind_port = 6002 user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True [pipeline:main] pipeline = healthcheck recon account-server [filter:recon] use = egg:swift#recon recon_cache_path = /var/cache/swift 11、编辑/etc/swift/container-server.conf [DEFAULT] bind_ip = 你的IP bind_port = 6001(2.conf为6011) user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True [pipeline:main] pipeline = healthcheck recon container-server [filter:recon] use = egg:swift#recon recon_cache_path = /var/cache/swift 12、编辑/etc/swift/object-server.conf [DEFAULT] bind_ip = 你的IP bind_port = 6000 user = swift swift_dir = /etc/swift devices = /srv/node mount_check = True [pipeline:main] pipeline = healthcheck recon object-server [filter:recon] use = egg:swift#recon recon_cache_path = /var/cache/swift recon_lock_path = /var/lock 13、修改权限 chown -R swift:swift /srv/node/* mkdir -p /var/cache/swift/1 /var/cache/swift/2 chown -R root:swift /var/cache/swift/* chmod -R 775 /var/cache/swift/* 创建并分配初始化环 1、在/etc/swift中执行以下命令 swift-ring-builder account.builder create 10 1 1 swift-ring-builder account.builder add \ --region 1 --zone 1 --ip 你的IP地址 --port 6002 --device 你的硬盘 --weight 100 swift-ring-builder account.builder rebalance swift-ring-builder container.builder create 10 1 1 swift-ring-builder container.builder add \ --region 1 --zone 1 --ip 你的IP地址 --port 6001 --device 你的硬盘 --weight 100 swift-ring-builder container.builder rebalance swift-ring-builder object.builder create 10 1 1 swift-ring-builder object.builder add \ --region 1 --zone 1 --ip 你的IP地址 --port 6000 --device 你的硬盘 --weight 100 swift-ring-builder object.builder rebalance 2、在/etc/swift下下载文件 curl -o /etc/swift/swift.conf \ https://git.openstack.org/cgit/openstack/swift/plain/etc/swift.conf-sample?h=stable/newton 3、执行以下命令两次获得两个字符串 openssl rand -hex 10 4、编辑/etc/swift/swift.conf [swift-hash] swift_hash_path_suffix = 第一个字符串 swift_hash_path_prefix = 第二个字符串 [storage-policy:0] name = Policy-0 default = yes 5、修改权限 chown -R root:swift /etc/swift/* 6、重启服务 service memcached restart service swift-proxy restart 7、启动对象存储服务 swift-init all start 验证swift 1、运行脚本 source demo-openrc 2、获得服务状态 swift stat 显示类似以下信息即成功 Account: AUTH_ed0b60bf607743088218b0a533d5943f Containers: 0 Objects: 0 Bytes: 0 Containers in policy "policy-0": 0 Objects in policy "policy-0": 0 Bytes in policy "policy-0": 0 X-Account-Project-Domain-Id: default X-Timestamp: 1444143887.71539 X-Trans-Id: tx1396aeaf17254e94beb34-0056143bde Content-Type: text/plain; charset=utf-8 Accept-Ranges: bytes 3、创建一个容器 openstack container create 容器名 4、上传一个对象 openstack object create 容器名 对象名 5、获得对象列表 openstack object list 容器名字 6、下载对象 openstack object save 容器名 对象名 也可以用curl或postman验证

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册