首页 文章 精选 留言 我的

精选列表

搜索[环境部署],共10000篇文章
优秀的个人博客,低调大师

Kubernetes集群部署2

1.配置并启用 etcd 集群 A. 配置启动项并将启动项分发至其他节点 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #vim/usr/lib/systemd/system/etcd.service [Unit] Description=etcd After=network.target After=network-online.target Wants=network-online.target Documentation= [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 RestartSec=5 LimitNOFILE=65536 [Install] WantedBy=multi-user.target #ansiblenode-mcopy-a'src=/usr/lib/systemd/system/etcd.servicedest=/usr/lib/systemd/system/' B.指定 etcd 的工作目录和数据目录 1 2 3 #mkdir-p/var/lib/etcd/&&mkdir-p/etc/etcd #ansiblenode-mfile-a'path=/var/lib/etcdstate=directory' #ansiblenode-mfile-a'path=/etc/etcdstate=directory' C. 配置 etcd.conf 配置文件并分发至其他节点 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 #exportETCD_NAME=etcd1 #exportINTERNAL_IP=192.168.100.102 #cat<<EOF>etcd.conf name: '${ETCD_NAME}' data- dir : "/var/lib/etcd/" listen-peer-urls:https: // ${INTERNAL_IP}:2380 listen-client-urls:https: // ${INTERNAL_IP}:2379,https: //127 .0.0.1:2379 initial-advertise-peer-urls:https: // ${INTERNAL_IP}:2380 advertise-client-urls:https: // ${INTERNAL_IP}:2379 initial-cluster: "etcd1=https://192.168.100.102:2380,etcd2=https://192.168.100.103:2380,etcd3=https://192.168.100.104:2380" initial-cluster-token: 'etcd-cluster' #初始化集群状态('new'or'existing'). initial-cluster-state: 'new' client-transport-security: cert- file : /etc/kubernetes/ssl/etcd .pem key- file : /etc/kubernetes/ssl/etcd-key .pem trusted-ca- file : /etc/kubernetes/ssl/ca .pem peer-transport-security: cert- file : /etc/kubernetes/ssl/etcd .pem key- file : /etc/kubernetes/ssl/etcd-key .pem trusted-ca- file : /etc/kubernetes/ssl/ca .pem EOF #mvetcd.conf/etc/etcd/ ##更换节点etcd名及其IP,完成后分发至相应节点 #ansible192.168.100.103-mcopy-a'src=etcd.confdest=/etc/etcd/etcd.conf' #ansible192.168.100.104-mcopy-a'src=etcd.confdest=/etc/etcd/etcd.conf' D. 启动 etcd 集群 1 2 3 4 5 6 #systemctlstartetcd #systemctlstatusetcd #systemctlenableetcd #ansiblenode-a'systemctlstartetcd' #ansiblenode-a'systemctlstatusetcd' #ansiblenode-a'systemctlenableetcd' 注:首个 etcd 节点会显示启动失败,那是由于没有检测到其他节点存活状态。 E.查看集群成员 1 2 3 4 #etcdctl--endpoints=https://192.168.100.102:2379memberlist 32293bbc65784dda:name=etcd1peerURLs=https: //192 .168.100.102:2380clientURLs=https: //192 .168.100.102:2379isLeader= true 703725a0e421bc44:name=etcd2peerURLs=https: //192 .168.100.103:2380clientURLs=https: //192 .168.100.103:2379isLeader= false 78ac8de330c5272a:name=etcd3peerURLs=https: //192 .168.200.104:2380clientURLs=https: //192 .168.100.104:2379isLeader= false F.查看集群健康状况 1 2 3 4 5 #etcdctl--endpoints=https://192.168.100.102:2379cluster-health member32293bbc65784ddaishealthy:gothealthyresultfromhttps: //192 .168.100.102:2379 member703725a0e421bc44ishealthy:gothealthyresultfromhttps: //192 .168.100.103:2379 member78ac8de330c5272aishealthy:gothealthyresultfromhttps: //192 .168.100.104:2379 clusterishealthy 2.配置并启用 flanneld A. 配置启动项并分发至其他节点 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 #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 #ansiblenode-mcopy-a'src=/usr/lib/systemd/system/flanneld.servicedest=/usr/lib/systemd/system/' #cat<<EOF>/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}}\ "$@" EOF #chmod755/usr/bin/flanneld-start #ansiblenode-mcopy-a'src=/usr/bin/flanneld-startdest=/usr/bin/mode=755' B. 配置 flannel 配置文件并分发至其他节点 1 2 3 4 5 6 #cat<<EOF>/etc/sysconfig/flanneld FLANNEL_ETCD_ENDPOINTS= "https://192.168.100.102:2379,https://192.168.100.103:2379,https://192.168.100.104:2379" FLANNEL_ETCD_PREFIX= "/kube/network" FLANNEL_OPTIONS= "-etcd-cafile=/etc/kubernetes/ssl/ca.pem-etcd-certfile=/etc/kubernetes/ssl/etcd.pem-etcd-keyfile=/etc/kubernetes/ssl/etcd-key.pem" EOF #ansiblenode-mcopy-a'src=/etc/sysconfig/flannelddest=/etc/sysconfig/' C.使用 etcd 存储为 flannel 创建目录并添加网络配置 1 2 3 #etcdctl--endpoints=https://192.168.100.102:2379mkdir/kube/network #etcdctl--endpoints=https://192.168.100.102:2379set/kube/network/config'{"Network":"10.254.0.0/16"}' { "Network" : "10.254.0.0/16" } D. 启动 flanneld 1 2 3 4 5 6 #systemctlstartflanneld #systemctlstatusflanneld #systemctlenableflanneld #ansiblenode-a'systemctlstartflanneld' #ansiblenode-a'systemctlstatusflanneld' #ansiblenode-a'systemctlenableflanneld' E. 查看各节点网段 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #cat/var/run/flannel/subnet.env FLANNEL_NETWORK=10.254.0.0 /16 FLANNEL_SUBNET=10.254.80.1 /24 FLANNEL_MTU=1472 FLANNEL_IPMASQ= false #ansiblenode-a"cat/var/run/flannel/subnet.env" 192.168.100.104|SUCCESS|rc=0>> FLANNEL_NETWORK=10.254.0.0 /16 FLANNEL_SUBNET=10.254.95.1 /24 FLANNEL_MTU=1472 FLANNEL_IPMASQ= false 192.168.100.103|SUCCESS|rc=0>> FLANNEL_NETWORK=10.254.0.0 /16 FLANNEL_SUBNET=10.254.59.1 /24 FLANNEL_MTU=1472 FLANNEL_IPMASQ= false F. 更改 docker 网段为 flannel 分配的网段 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #exportFLANNEL_SUBNET=10.254.80.1/24 #cat<<EOF>daemon.json { "bip" : "$FLANNEL_SUBNET" } EOF #mkdir-p/etc/docker/&&mvdaemon.json/etc/docker/ ##更换为相应节点网段,完成后分发至相应节点 #ansiblenode-mfile-a'path=/etc/docker/state=directory' #ansible192.168.100.103-mcopy-a'src=daemon.jsondest=/etc/docker/daemon.json' #ansible192.168.100.104-mcopy-a'src=daemon.jsondest=/etc/docker/daemon.json' #systemctldaemon-reload #systemctlrestartdocker #ansiblenode-a"systemctldaemon-reload" #ansiblenode-a"systemctlrestartdocker" G. 查看是否已分配相应网段 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #route-n KernelIProutingtable DestinationGatewayGenmaskFlagsMetricRefUseIface 0.0.0.0192.168.100.20.0.0.0UG10000ens33 10.254.0.00.0.0.0255.255.0.0U000flannel0 10.254.80.00.0.0.0255.255.255.0U000docker0 192.168.100.00.0.0.0255.255.255.0U10000ens33 #ansiblenode-a'route-n' 192.168.100.103|SUCCESS|rc=0>> KernelIProutingtable DestinationGatewayGenmaskFlagsMetricRefUseIface 0.0.0.0192.168.100.20.0.0.0UG10000ens33 10.254.0.00.0.0.0255.255.0.0U000flannel0 10.254.59.00.0.0.0255.255.255.0U000docker0 192.168.100.00.0.0.0255.255.255.0U10000ens33 192.168.100.104|SUCCESS|rc=0>> KernelIProutingtable DestinationGatewayGenmaskFlagsMetricRefUseIface 0.0.0.0192.168.100.20.0.0.0UG10000ens33 10.254.0.00.0.0.0255.255.0.0U000flannel0 10.254.95.00.0.0.0255.255.255.0U000docker0 192.168.100.00.0.0.0255.255.255.0U10000ens33 H. 使用 etcdctl 命令查看 flannel 的相关信息 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 #etcdctl--endpoints=https://192.168.100.102:2379ls/kube/network/subnets /kube/network/subnets/10 .254.80.0-24 /kube/network/subnets/10 .254.59.0-24 /kube/network/subnets/10 .254.95.0-24 #etcdctl--endpoints=https://192.168.100.102:2379-oextendedget/kube/network/subnets/10.254.80.0-24 Key: /kube/network/subnets/10 .254.80.0-24 Created-Index:10 Modified-Index:10 TTL:85486 Index:12 { "PublicIP" : "192.168.100.102" } #etcdctl--endpoints=https://192.168.100.102:2379-oextendedget/kube/network/subnets/10.254.59.0-24 Key: /kube/network/subnets/10 .254.59.0-24 Created-Index:11 Modified-Index:11 TTL:85449 Index:12 { "PublicIP" : "192.168.100.103" } #etcdctl--endpoints=https://192.168.100.102:2379-oextendedget/kube/network/subnets/10.254.95.0-24 Key: /kube/network/subnets/10 .254.95.0-24 Created-Index:12 Modified-Index:12 TTL:85399 Index:12 { "PublicIP" : "192.168.100.104" } I. 测试网络是否正常 1 2 #ping-c410.254.59.1 #ping-c410.254.95.1 3. 配置并启用 Kubernetes Master 节点 Kubernetes Master 节点包含的组件: kube-apiserver kube-controller-manager kube-scheduler A. 配置 config 文件并分发至所有节点 1 2 3 4 5 6 #grep^[A-Z]/etc/kubernetes/config KUBE_LOGTOSTDERR= "--logtostderr=true" KUBE_LOG_LEVEL= "--v=0" KUBE_ALLOW_PRIV= "--allow-privileged=true" KUBE_MASTER= "--master=http://192.168.100.102:8080" #ansiblenode-mcopy-a'src=/etc/kubernetes/configdest=/etc/kubernetes/' 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 26 27 #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.102--bind-address=192.168.100.102--insecure-bind-address=192.168.100.102" KUBE_ETCD_SERVERS= "--etcd-servers=https://192.168.100.102:2379,192.168.100.103:2379,192.168.100.104:2379" KUBE_SERVICE_ADDRESSES= "--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL= "--admission-control=Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,ResourceQuota" KUBE_API_ARGS= "--authorization-mode=RBAC,Node--kubelet-https=true--service-node-port-range=30000-42767--enable-bootstrap-token-auth--token-auth-file=/etc/kubernetes/token.csv--tls-cert-file=/etc/kubernetes/ssl/kubernetes.pem--tls-private-key-file=/etc/kubernetes/ssl/kubernetes-key.pem--client-ca-file=/etc/kubernetes/ssl/ca.pem--service-account-key-file=/etc/kubernetes/ssl/ca-key.pem--etcd-cafile=/etc/kubernetes/ssl/ca.pem--etcd-certfile=/etc/kubernetes/ssl/etcd.pem--etcd-keyfile=/etc/kubernetes/ssl/etcd-key.pem--enable-swagger-ui=true--event-ttl=1h--basic-auth-file=/etc/kubernetes/basic_auth_file" D. 配置访问用户 1 #echoadmin,admin,1>/etc/kubernetes/basic_auth_file 格式:用户名、密码和UID E. 启动 kube-apiserver 1 2 3 #systemctlstartkube-apiserver #systemctlstatuskube-apiserver #systemctlenablekube-apiserver F. 将 admin 用户与clusterrole: cluster-admin 绑定到一起并验证 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #kubectlgetclusterrole/cluster-admin-oyaml #kubectlcreateclusterrolebindinglogin-on-dashboard-with-cluster-admin--clusterrole=cluster-admin--user=admin clusterrolebinding "login-on-dashboard-with-cluster-admin" created #kubectlgetclusterrolebinding/login-on-dashboard-with-cluster-admin-oyaml apiVersion:rbac.authorization.k8s.io /v1 kind:ClusterRoleBinding metadata: creationTimestamp:2017-10-31T10:35:06Z name:login-on-dashboard-with-cluster-admin resourceVersion: "116" selfLink: /apis/rbac .authorization.k8s.io /v1/clusterrolebindings/login-on-dashboard-with-cluster-admin uid:292ae19a-be27-11e7-853b-000c297aff5d roleRef: apiGroup:rbac.authorization.k8s.io kind:ClusterRole name:cluster-admin subjects: -apiGroup:rbac.authorization.k8s.io kind:User name:admin G. 配置 kube-controller-manager 启动项 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #vim/usr/lib/systemd/system/kube-controller-manager.service [Unit] Description=KubernetesControllerManager Documentation= [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 H. 配置 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--cluster-signing-cert-file=/etc/kubernetes/ssl/ca.pem--cluster-signing-key-file=/etc/kubernetes/ssl/ca-key.pem--service-account-private-key-file=/etc/kubernetes/ssl/ca-key.pem--root-ca-file=/etc/kubernetes/ssl/ca.pem" I. 启动 kube-controller-manager 1 2 #systemctlstartkube-controller-manager #systemctlstatuskube-controller-manager J. 配置 kube-scheduler 启动项 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #vim/usr/lib/systemd/system/kube-scheduler.service [Unit] Description=KubernetesSchedulerPlugin Documentation= [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 K. 配置 kube-scheduler 配置文件 1 2 #grep^[A-Z]/etc/kubernetes/scheduler KUBE_SCHEDULER_ARGS= "--address=127.0.0.1" L. 启动 kube-scheduler 1 2 #systemctlstartkube-scheduler #systemctlstatuskube-scheduler M. 验证 Master 节点 1 2 3 4 5 6 #kubectlgetcs #kubectlgetcomponentstatuses NAMESTATUSMESSAGEERROR schedulerHealthyok controller-managerHealthyok etcd-0Healthy{ "health" : "true" } 4. 配置并启用 Kubernetes Node 节点 Kubernetes Node 节点包含如下组件: kubelet kube-proxy A. 为 kubelet 赋予权限并新建 kubelet 数据目录 kubelet 启动时向 kube-apiserver 发送 TLS bootstrapping 请求,需要先将 bootstrap token 文件中的 kubelet-bootstrap 用户赋予 system:node-bootstrapper cluster 角色(role), 然后 kubelet 才能有权限创建认证请求(certificate signing requests)。 Master: 1 2 3 4 5 6 #kubectlcreateclusterrolebindingkubelet-bootstrap\ --clusterrole=system:node-bootstrapper\ --user=kubelet-bootstrap clusterrolebinding "kubelet-bootstrap" created #mkdir-p/var/lib/kubelet #ansiblenode-mfile-a'path=/var/lib/kubeletstate=directory' B. 配置 kubelet 启动项并分发至 node 节点 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 #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 ##分发至其他Node节点 #ansiblenode-mcopy-a'src=/usr/lib/systemd/system/kubelet.servicedest=/usr/lib/systemd/system/' C. 配置 kubelet 配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 #exportKUBELET_ADDRESS=192.168.100.102 #exportKUBELET_HOSTNAME=Master #cat<<EOF>kubelet KUBELET_ADDRESS= "--address=$KUBELET_ADDRESS" KUBELET_PORT= "--port=10250" KUBELET_HOSTNAME= "--hostname-override=$KUBELET_HOSTNAME" KUBELET_POD_INFRA_CONTAINER= "--pod-infra-container-image=hub.c.163.com/k8s163/pause-amd64:3.0" KUBELET_ARGS= "--cluster-dns=10.254.0.2--experimental-bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig--kubeconfig=/etc/kubernetes/kubelet.kubeconfig--fail-swap-on=false--cert-dir=/etc/kubernetes/ssl--cluster-domain=cluster.local.--serialize-image-pulls=false" EOF #mvkubelet/etc/kubernetes/ ##更换kubelet节点IP和hostname,完成后分发至相应节点 #ansible192.168.100.103-mcopy-a'src=kubeletdest=/etc/kubernetes/' #ansible192.168.100.104-mcopy-a'src=kubeletdest=/etc/kubernetes/' D.启动 kubelet 1 2 3 4 #systemctlstartkubelet #systemctlstatuskubelet #ansiblenode-a'systemctlstartkubelet' #ansiblenode-a'systemctlstatuskubelet' E.将 Node 加入 Kubernetes 集群 kubelet 首次启动时向 kube-apiserver 发送证书签名请求,必须通过 Master 认证才会将该 Node 加入到集群。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #kubectlgetnodes Noresourcesfound. #kubectlgetcsr###查看未授权的CSR请求 NAMEAGEREQUESTORCONDITION node-csr-ZU39iUu-E9FuadeTq589skubelet-bootstrapPending node-csr-sJXwbG8c9UUGS8iTrV815skubelet-bootstrapPending node-csr-zpol8cIJZfrcU8fd7l415skubelet-bootstrapPending #kubectlcertificateapprovenode-csr-ZU39iphJAYDQfsLssAwMViUu-E9Fua2pKhELMdeTq58###通过CSR请求[其他两个节点也使用同样的命令授权] certificatesigningrequest "node-csr-ZU39iphJAYDQfsLssAwMViUu-E9Fua2pKhELMdeTq58" approved #kubectlgetcsr NAMEAGEREQUESTORCONDITION node-csr-ZU39iUu-E9FuadeTq5850skubelet-bootstrapApproved,Issued node-csr-sJXwbG8c9UUGS8iTrV81mkubelet-bootstrapApproved,Issued node-csr-zpol8cIJZfrcU8fd7l41mkubelet-bootstrapApproved,Issued #kubectlgetnodes##查看nodes NAMESTATUSAGEVERSION masterReady1mv1.8.2 node1Ready2mv1.8.2 node2Ready2mv1.8.2 注:CSR 授权后会自动在 Node 端生成 kubelet kubeconfig 配置文件和公私钥: 1 2 3 4 #ls/etc/kubernetes/kubelet.kubeconfig /etc/kubernetes/kubelet .kubeconfig #ls/etc/kubernetes/ssl/kubelet* /etc/kubernetes/ssl/kubelet-client .crt /etc/kubernetes/ssl/kubelet-client .key /etc/kubernetes/ssl/kubelet .crt /etc/kubernetes/ssl/kubelet .key F. 配置 kube-proxy 启动项并分发至其他 node 节点 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #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 ##分发至其他Node节点 #ansiblenode-mcopy-a'src=/usr/lib/systemd/system/kube-proxy.servicedest=/usr/lib/systemd/system/' G. 调整内核参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #grep-v^#/etc/sysctl.conf###配置kube-proxy代理模式 net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 #sysctl-p###加载系统参数 net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 #ansiblenode-mcopy-a'src=/etc/sysctl.confdest=/etc/' #ansiblenode-a'sysctl-p' 192.168.100.104|SUCCESS|rc=0>> net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 192.168.100.103|SUCCESS|rc=0>> net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1 说明:在这加这个参数是因为 kube-proxy 使用 iptables 来进行数据转发,而Linux系统默认是禁止数据包转发,这里我是因为无法使用nodeport发现的。 H.配置 kube-proxy 配置文件并分发至其他 node 节点 1 2 3 4 5 6 7 8 #exportKUBE_PROXY=192.168.100.102 #cat<<EOF>proxy KUBE_PROXY_ARGS= "--bind-address=$KUBE_PROXY--hostname-override=$KUBE_PROXY--cluster-cidr=10.254.0.0/16--proxy-mode=iptables--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig" EOF #mvproxy/etc/kubernetes/proxy ##更换kube-proxy节点IP,完成后分发至相应节点 #ansible192.168.100.103-mcopy-a'src=proxydest=/etc/kubernetes/' #ansible192.168.100.104-mcopy-a'src=proxydest=/etc/kubernetes/' I. 启动 kube-proxy 1 2 3 4 #systemctlstartkube-proxy #systemctlstatuskube-proxy #ansiblenode-a'systemctlstartkube-proxy' #ansiblenode-a'systemctlstatuskube-proxy' J. 查看节点相关信息 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 33 34 35 36 37 38 #kubectlgetnodes-owide###查看节点相关信息(注:这里容器显示Unknown是因为版本相对较高) NAMESTATUSROLESAGEVERSIONEXTERNAL-IPOS-IMAGEKERNEL-VERSIONCONTAINER-RUNTIME masterReady<none>3mv1.8.2<none>CentOSLinux7(Core)3.10.0-693.2.2.el7.x86_64docker: //Unknown node1Ready<none>3mv1.8.2<none>CentOSLinux7(Core)3.10.0-693.2.2.el7.x86_64docker: //Unknown node2Ready<none>3mv1.8.2<none>CentOSLinux7(Core)3.10.0-693.2.2.el7.x86_64docker: //Unknown #kubectlgetnode--show-labels=true #kubectlgetnodes--show-labels###查看节点标签 NAMESTATUSROLESAGEVERSIONLABELS masterReady<none>4mv1.8.2beta.kubernetes.io /arch =amd64,beta.kubernetes.io /os =linux,kubernetes.io /hostname =master node1Ready<none>5mv1.8.2beta.kubernetes.io /arch =amd64,beta.kubernetes.io /os =linux,kubernetes.io /hostname =node1 node2Ready<none>5mv1.8.2beta.kubernetes.io /arch =amd64,beta.kubernetes.io /os =linux,kubernetes.io /hostname =node2 #kubectlversion--short###查看kubectl版本信息 ClientVersion:v1.8.2 ServerVersion:v1.8.2 #curl###查看健康状况 ok #kubectlcluster-info###查看集群信息 Kubernetesmasterisrunningathttps: //192 .168.100.102:6443 #kubectlgetns###获取所有命名空间 #kubectlgetnamespace NAMESTATUSAGE defaultActive29m kube-publicActive29m kube-systemActive29m #kubectlgetservices###查看默认service NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE kubernetesClusterIP10.254.0.1<none>443 /TCP 36m #kubectlgetservices--all-namespaces###查看所有service NAMESPACENAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE defaultkubernetesClusterIP10.254.0.1<none>443 /TCP 37m #kubectlgetep###查看endpoints #kubectlgetendpoints NAMEENDPOINTSAGE kubernetes192.168.100.102:644338m #kubectlgetsa###查看serviceaccount #kubectlgetserviceaccount NAMESECRETSAGE default138m 说明:其他命令可使用kubectl --help查看,某些长命令可以缩写(如kubectl get namespace可缩写为kubectl get ns),kubectl命令表参考如下: http://docs.kubernetes.org.cn/683.html 本文转自 结束的伤感 51CTO博客,原文链接:http://blog.51cto.com/wangzhijian/2046124

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

docker分离部署lnmp

以下所需的全部的文件、镜像、软件,如有需要请到我的百度云分享下载: 链接:http://pan.baidu.com/s/1kUVNdsj 密码:an9l 项目需求: 构建lnmp平台。 要求nginx、php、mysql分开布署。 Nginx通过fastcgi方式支持php动态页面 实验完整框架如下: 说明:使用单一进程容器,即一个容器只运行一种服务,而不是把所有服务放在一个容器的设计,让lnmp项目需要的Nginx、PHP、MySQL组件,分别运行在各自镜像创建出来的独立容器中。 实验步骤如下: 1、安装docker1.12并开始服务 1)安装docker1.12 2)开启docker服务并开机自启 3)关闭selinux(一定要关闭) 4)开启路由转发功能 5)下载centos6镜像 (我这里已经下载好,并做成了归档压缩包,只用解压即可) 2、创建实验所用文件夹以及文件 1)分别创建工作目录 2)再分别创建相应目录下的文件和子目录 3、分别编辑nginx、php、mysql的dockerfile文件以及各自的supervisord.conf文件 1)nginx ①编辑nginx的dockerfile文件 #images of nginx FROM centos:centos6 MAINTAINER from zhengpengfei@example.com #install supervisor RUN yum -y install python-setuptools RUN /usr/bin/easy_install supervisor #install nginx RUN yum -y install pcre-devel zlib-devel gcc make ADD ./software/nginx-1.6.2.tar.gz /usr/src RUN useradd -M -s /sbin/nologin nginx RUN cd /usr/src/nginx-1.6.2/ && ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --user=nginx --group=nginx && make && make install #Modify nginx configuration file COPY nginx.conf /usr/local/nginx/conf/ RUN ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin RUN mkdir /usr/local/nginx/html/web #Open nginx service COPY supervisord.conf /etc/supervisor/supervisord.conf EXPOSE 80 CMD ["/usr/bin/supervisord"] ②编写nginx的supervisord.conf配置文件 ③docker build -t命令制作nginx镜像 ④镜像制作完成 2)php ①编辑php的dockerfile文件 #images of php FROM centos:centos6 MAINTAINER from zhengpengfei@example.com #install supervisor RUN yum -y install python-setuptools RUN /usr/bin/easy_install supervisor #install php RUN yum -y install gd libxml2-devel libjpeg-devel libpng-devel mysql-devel gcc make RUN useradd -M -s /sbin/nologin php ADD ./software/php-5.3.28.tar.gz /usr/src RUN cd /usr/src/php-5.3.28/ RUN cp /usr/lib64/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so RUN cd /usr/src/php-5.3.28/ && ./configure --prefix=/usr/local/php --with-gd --with-zlib --with-mysql --with-mysqli --with-mysql-sock --with-config-file-path=/usr/local/php --enable-mbstring --enable-fpm --with-jpeg-dir=/usr/lib && make && make install #Modify PHP configuration file RUN cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf COPY php-fpm.conf /usr/local/php/etc/ RUN mkdir -p /var/www/html/web #Open php-fpm service ADD ./supervisord.conf /etc/supervisor/supervisord.conf EXPOSE 9000 CMD ["/usr/bin/supervisord"] ②编写php的supervisord.conf配置文件 ③docker build -t命令制作php镜像 ④镜像制作完成 3)mysql ①编辑mysql的dockerfile文件 #image of mysql FROM centos:centos6 MAINTAINER from zhengpengfei@example.com #install supervisor RUN yum -y install python-setuptools RUN /usr/bin/easy_install supervisor #install mysql RUN yum -y install ncurses-devel make gcc gcc-c++ ADD ./software/cmake-2.8.12.tar.gz /usr/src ADD ./software/mysql-5.5.38.tar.gz /usr/src RUN cd /usr/src/cmake-2.8.12 && ./configure && gmake && gmake install RUN cd /usr/src/mysql-5.5.38 && cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc/ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all && make && make install #Optimal adjustment mysql WORKDIR /usr/src/mysql-5.5.38/ RUN cp -rf ./support-files/my-medium.cnf /etc/my.cnf RUN cp -rf ./support-files/mysql.server /etc/rc.d/init.d/mysqld RUN chmod +x /etc/rc.d/init.d/mysqld RUN echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile RUN source /etc/profile #Initialize mysql RUN groupadd mysql RUN useradd -M -s /sbin/nologin mysql -g mysql RUN chown -R mysql:mysql /usr/local/mysql RUN /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ #service mysql start ADD ./supervisord.conf /etc/supervisor/supervisord.conf EXPOSE 3306 CMD ["/usr/bin/supervisord"] ②编写mysql的supervisord.conf配置文件 ③docker build -t命令制作mysql镜像 ④镜像制作完成 4、编写docker-compose.yml文件 5、安装docker-compose 1)先安装pip 2)再安装compose 6、通过docker-compose启动项目 7、进入mysql容器修改数据库root密码以及创建数据库和创建授权用户 1)修改数据库用户root密码 2)创建数据库 3)创建授权用户 4)给root用户授予全部权限 8、做html、php页面和数据库访问测试 1)制作html、php测试页 2)测试nginx和php的访问处理 3)制作数据库的测试页面 4)测试数据库连接 至此说明nginx、php、mysql三者的协同工作已经没有问题了 8、安装一个电影网站,做最后的lnmp协同工作测试 1)解压缩SKYUC 2)设置权限 分别去nginx和php容器给予权限: php: nginx: 3)宿主机防火墙开启80例外 4)在一台客户机安装SKYUC 本文转自Mr大表哥 博客,原文链接:http://blog.51cto.com/zpf666/1905555 如需转载请自行联系原作者

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

hive 部署UDF函数

一.临时添加UDF函数 1.上传jar包至hive服务器 2.hive shell执行如下命令: 1 2 3 4 5 6 addjar/home/hive/hivejar/billing-on-hive-1.0.jar createtemporaryfunctionstripas'com.tsingzone.bigdata.billing.GetOperator'; 注: strip:自定义函数名 com.tsingzone.bigdata.billing.GetOperator:类名 仅对当前shell生效 3.使用方法: 1 select strip(dest_termi_id) from huadan201601limit10; 二.永久添加UDF函数 1.上传jar包至hdfs中 1 hdfsdfs-puthivejar/billing- on -hive-1.0.jar/ user /hive/hive_jar 2.创建函数 1 create function billing as 'com.tsingzone.bigdata.billing.GetOperator' usingjar 'hdfs:///user/hive/hive_jar/billing-on-hive-1.0.jar' 3.使用 1 hive-S-e "selectbilling(dest_termi_id)fromhuadan201601limit10;" 参考文档:http://blog.csdn.net/liam08/article/details/51311772 本文转自 穿越防火墙 51CTO博客,原文链接:http://blog.51cto.com/sjitwant/1932990

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

Docker部署私有仓库

今天和大家聊聊Docker的私有仓库。 前段时间啊在CentOS6.x上玩Docker的私有仓库,由于https认证的原因,一直没有能解决,最后听群上的一朋友说,换成CentOS 7试试,也别说,最后实验成功啦! 所以我建议朋友在玩docker的私有仓库的时候,也能现在CentOS7.x系统上玩,确定对整个过程熟悉后,然后换成你熟悉的6.x的系统,这样也是一个循循渐进的过程吧! 一、准备 1、地址规划 1 2 Docker私有仓库地址:192.168.0.109 Docker客户端地址:192.168.0.110 2、激活网卡 1 2 3 4 #vim/etc/sysconfig/network-scripts/ifcfg-eno16777728 修改此行 ONBOOT= yes #/etc/init.d/networkrestart 3、关闭本地防火墙并设置开机不自启动 1 2 #systemctlstopfirewalld.service #systemctldisablefirewalld.service 4、关闭本地selinux防火墙 1 2 3 #vi/etc/sysconfig/selinux SELINUX=disabled #setenforce0 5、安装ifconfig工具 1 #yuminstallnet-tools 二、安装 1、安装docker 1 2 3 4 #yuminstalldocker #yumupgradedevice-mapper-libs #servicedockerstart #chkconfigdockeron 2、本地私有仓库registry 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@localhost~] #dockerpullregistry Tryingtopullrepositorydocker.io /registry ... 24dd746e9b9f:Downloadcomplete 706766fe1019:Downloadcomplete a62a42e77c9c:Downloadcomplete 2c014f14d3d9:Downloadcomplete b7cf8f0d9e82:Downloadcomplete d0b170ebeeab:Downloadcomplete 171efc310edf:Downloadcomplete 522ed614b07a:Downloadcomplete 605ed9113b86:Downloadcomplete 22b93b23ebb9:Downloadcomplete 2ac557a88fda:Downloadcomplete 1f3b4c532640:Downloadcomplete 27ebaac643a7:Downloadcomplete ce630195cb45:Downloadcomplete Status:Downloadednewerimage for docker.io /registry :latest [root@localhost~] #dockerimages REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE docker.io /registry latest24dd746e9b9f3daysago413.8MB 3、基于私有仓库镜像运行容器 1 2 3 4 5 [root@localhost~] #dockerrun-d-p5000:5000-v/opt/data/registry:/tmp/registrydocker.io/registry bb2c0d442df94e281479332c2608ef144f378e71743c5410e36b80c465771a95 [root@localhost~] #dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES bb2c0d442df9docker.io /registry :latest "docker-registry" 10secondsagoUp7seconds0.0.0.0:5000->5000 /tcp serene_hopper 4、访问私有仓库 1 2 [root@localhost~] #curl127.0.0.1:5000/v1/search { "num_results" :0, "query" : "" , "results" :[]} // 私有仓库为空,没有提交新镜像到仓库中 5、从Docker Hub上下载一个ssh镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@localhost~] #dockersearch-s10ssh NAMEDESCRIPTIONSTARSOFFICIALAUTOMATED docker.io:docker.io /fedora/ssh 18[OK] [root@localhost~] #dockerpullfedora/ssh Tryingtopullrepositorydocker.io /fedora/ssh ... 2aeb2b6d9705:Downloadcomplete 511136ea3c5a:Downloadcomplete 00a0c78eeb6d:Downloadcomplete 834629358fe2:Downloadcomplete 571e8a51403c:Downloadcomplete 87d5d42e693c:Downloadcomplete 92b5ef05fe68:Downloadcomplete 92d3910dc33c:Downloadcomplete cf2e9fa11368:Downloadcomplete Status:Downloadednewerimage for docker.io /fedora/ssh :latest [root@localhost~] #dockerimages REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE docker.io /registry latest24dd746e9b9f3daysago413.8MB docker.io /fedora/ssh latest2aeb2b6d97059daysago254.4MB 6、创建镜像链接或为基础镜像打个标签 1 2 3 4 5 6 [root@localhost~] #dockertagdocker.io/fedora/ssh127.0.0.1:5000/ssh [root@localhost~] #dockerimages REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE docker.io /registry latest24dd746e9b9f3daysago413.8MB docker.io /fedora/ssh latest2aeb2b6d97059daysago254.4MB 127.0.0.1:5000 /ssh latest2aeb2b6d97059daysago254.4MB 7、修改Docker配置文件制定私有仓库url 1 2 3 4 5 [root@localhost~] #vim/etc/sysconfig/docker 修改此行 OPTIONS= '--selinux-enabled--insecure-registry192.168.0.109:5000' [root@localhost~] #servicedockerrestart Redirectingto /bin/systemctl restartdocker.service 8、提交镜像到本地私有仓库中 1 2 3 4 5 6 7 8 9 10 11 12 13 14 [root@localhost~] #dockerpush127.0.0.1:5000/ssh Thepushreferstoarepository[127.0.0.1:5000 /ssh ](len:1) Sendingimagelist Pushingrepository127.0.0.1:5000 /ssh (1tags) 511136ea3c5a:Imagesuccessfullypushed 00a0c78eeb6d:Imagesuccessfullypushed 834629358fe2:Imagesuccessfullypushed 571e8a51403c:Imagesuccessfullypushed 87d5d42e693c:Imagesuccessfullypushed 92b5ef05fe68:Imagesuccessfullypushed 92d3910dc33c:Imagesuccessfullypushed cf2e9fa11368:Imagesuccessfullypushed 2aeb2b6d9705:Imagesuccessfullypushed Pushingtag for rev[2aeb2b6d9705]on{http: //127 .0.0.1:5000 /v1/repositories/ssh/tags/latest } 9、查看私有仓库是否存在对应的镜像 1 2 [root@localhost~] #curl127.0.0.1:5000/v1/search { "num_results" :1, "query" : "" , "results" :[{ "description" : "" , "name" : "library/ssh" }]} 10、查看镜像的存储目录和文件 1 2 3 4 5 6 7 8 9 10 [root@localhost~] #tree/opt/data/registry/repositories/ /opt/data/registry/repositories/ └──library └── ssh ├──_index_images ├──json ├──tag_latest └──taglatest_json 2directories,4files 三、从私有仓库中下载已有的镜像 1、登陆另外一台Docker客户端 1 2 3 4 5 6 7 [root@localhost~] #sshroot@192.168.0.110 Theauthenticityofhost '192.168.0.110(192.168.0.110)' can'tbeestablished. ECDSAkeyfingerprintis5b:81:4b:66:d6: dd :48:16:9f:85:58:72:21:bd:ba:39. Areyousureyouwantto continue connecting( yes /no )? yes Warning:Permanentlyadded '192.168.0.110' (ECDSA)tothelistofknownhosts. root@192.168.0.110'spassword: Lastlogin:SunApr2614:39:512015from192.168.0.103 2、修改Docker配置文件 1 2 3 4 5 [root@localhost~] #vim/etc/sysconfig/docker 修改此行 OPTIONS= '--selinux-enabled--insecure-registry192.168.0.109:5000' // 添加私有仓库地址 [root@localhost~] #servicedockerrestart Redirectingto /bin/systemctl restartdocker.service 3、从私有仓库中下载已有的镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@localhost~] #dockerpull192.168.0.109:5000/ssh Tryingtopullrepository192.168.0.109:5000 /ssh ... 2aeb2b6d9705:Downloadcomplete 511136ea3c5a:Downloadcomplete 00a0c78eeb6d:Downloadcomplete 834629358fe2:Downloadcomplete 571e8a51403c:Downloadcomplete 87d5d42e693c:Downloadcomplete 92b5ef05fe68:Downloadcomplete 92d3910dc33c:Downloadcomplete cf2e9fa11368:Downloadcomplete Status:Downloadednewerimage for 192.168.0.109:5000 /ssh :latest [root@localhost~] #dockerimages REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE 192.168.0.109:5000 /ssh latest2aeb2b6d97059daysago254.4MB 四、浏览器访问仓库 本文转自zys467754239 51CTO博客,原文链接:http://blog.51cto.com/467754239/1638770,如需转载请自行联系原作者

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

部署docker-gitlab

Gitlab的docker化,找了些资料,后来发现其实人们早就已经做好了,并且在github上就有。最近学到了一个思想,”不重复造轮子“, 我这里简单照着文档做下总结。 GitLab是利用 Ruby on Rails 一个开源的版本管理系统,使用Git作为代码管理工具,并在此基础上搭建起来的web服务.实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。 安装docker: 1 #wget-qO-https://get.docker.com/|sh 安装docker-gitlab: 安装对应版本的gitlab镜像: 1 #dockerpullsameersbn/gitlab:8.5.5 如果想安装最新版,使用: 1 #dockerpullsameersbn/gitlab:latest 启动gitlab: 最快的启动方式是使用docker-compose: 1 #wgethttps://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml yml文件里存放了相应服务的配置,可根据情况更改;可以使用如下命令生成一个64位是随机字符串,用于GITLAB_SECRETS_DB_KEY_BASE 1 2 #pwgen-Bsv164 qs7KxxMx3wrWpFMH3CxFpbnCNHPfxsxcgRTJcNMgjMJhwLfvmh4HrmwKc4mMcRc7 1 -GITLAB_SECRETS_DB_KEY_BASE=qs7KxxMx3wrWpFMH3CxFpbnCNHPfxsxcgRTJcNMgjMJhwLfvmh4HrmwKc4mMcRc7 另外docker-gitlab默认使用/home/git/data这个目录用来存放提交上来的代码,我修改成了自己的路径: 1 2 volumes: - /srv/docker/gitlab/gitlab : /data/code 启动gitlab,这个过程需要等待一段时间: 1 #docker-composeup 执行完成之后查看启动结果: 1 2 3 4 5 root@gitlab:~ #dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES aefaf4098b00sameersbn /gitlab :8.5.5 "/sbin/entrypoint.sh" 13hoursagoUp13hours443 /tcp ,0.0.0.0:10022->22 /tcp ,0.0.0.0:10080->80 /tcp root_gitlab_1 a8ed7a4dd879sameersbn /postgresql :9.4-14 "/sbin/entrypoint.sh" 13hoursagoUp13hours5432 /tcp root_postgresql_1 a9e519dcb183sameersbn /redis :latest "/sbin/entrypoint.sh" 13hoursagoUp13hours6379 /tcp root_redis_1 如果不用docker-compose的方式,也可以手动 launch: 1、启动postgresql: 1 2 3 4 5 dockerrun--namegitlab-postgresql-d\ -- env 'DB_NAME=gitlabhq_production' \ -- env 'DB_USER=gitlab' -- env 'DB_PASS=password' \ --volume /srv/docker/gitlab/postgresql : /var/lib/postgresql \ sameersbn /postgresql :9.4-14 2、启动redis: 1 2 3 dockerrun--namegitlab-redis-d\ --volume /srv/docker/gitlab/redis : /var/lib/redis \ sameersbn /redis :latest 3、启动gitlab: 1 2 3 4 5 6 7 dockerrun--namegitlab-d\ --linkgitlab-postgresql:postgresql--linkgitlab-redis:redisio\ --publish10022:22--publish10080:80\ -- env 'GITLAB_PORT=10080' -- env 'GITLAB_SSH_PORT=10022' \ -- env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \ --volume /srv/docker/gitlab/gitlab : /home/git/data \ sameersbn /gitlab :8.5.5 上面的命令将使用10080作为Gitlab的Web访问端口,10022将作为ssh push和pull代码的端口。 在本地可以使用浏览器打开http://localhost:10080来访问Gitlab,初始登录网站使用root账户,用户名为root,密码为:5iveL!fe,登录后需要立即修改密码。 登陆: http://localhost:10080 登陆进去之后修改密码就可以进行项目管理了~ 本文转自Jx战壕 51CTO博客,原文链接:http://blog.51cto.com/xujpxm/1750968,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册