Ubuntu16.04多主机集群上手动部署Kubernetes,配置docker私有registry,配置Kubernetes-dashboard WEB ui

ubuntu18.04 K8s集群超简单成功搭建!!笔记 1. 所有主机节点上都需要安装docker 借鉴; [https://blog.csdn.net/b9567/article/details/105027440/](https://blog.csdn.net/b9567/article/details/105027440/) $ sudo apt-get update 安装 apt 依赖包,用于通过HTTPS来获取仓库 $ sudo apt-get install \ apt-transport-https \ ca-certificate 阅读详情

Ubuntu16.04多主机集群上手动部署Kubernetes,配置docker私有registry,配置Kubernetes-dashboard WEB ui

2017年03月17日 20:51:42 阅读数:3475 标签: kubernetesdashboardk8setcd集群docker更多

个人分类: kubernetesdocker

Ubuntu16.04多主机集群上手动部署Kubernetes,配置docker私有registry,配置Kubernetes-dashboard WEB ui

主要流程: 
- 部署etcd集群 
- 部署K8s Master 
- 配置flannel服务 
- 部署K8s Node 
- 部署DNS 
- 部署Dashboard


环境信息

项目版本
Etcd3.1.2
docker17.03.0-ce
flannelv0.7.0
Kubernetesv1.4.9

集群主机ip:

名称ipos
master10.107.20.5Ubuntu 16.04.2 LTS
node110.107.20.6Ubuntu 16.04.2 LTS
node210.107.20.7Ubuntu 16.04.2 LTS
node310.107.20.8Ubuntu 16.04.2 LTS
node410.107.20.9Ubuntu 16.04.2 LTS

每台主机上安装最新版Docker Engine,手工安装可参考博主其他博客。

部署etcd集群

我们将在5台主机上安装部署etcd集群

下载etcd

在部署机上下载etcd

ETCD_VERSION=${ETCD_VERSION:-"3.1.2"}
ETCD="etcd-v${ETCD_VERSION}-linux-amd64"
curl -L https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/${ETCD}.tar.gz -o etcd.tar.gz

tar xzf etcd.tar.gz -C /tmp
cd /tmp/etcd-v${ETCD_VERSION}-linux-amd64

for h in master node1 node2 node3 node4; do ssh user@$h mkdir -p '$HOME/kube' && scp -r etcd* user@$h:~/kube; done
for h in master node1 node2 node3 node4; do ssh user@$h 'sudo mkdir -p /opt/bin && sudo mv $HOME/kube/* /opt/bin && rm -rf $home/kube/*'; done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

可以手动到github上下载etcd release (https://github.com/coreos/etcd/releases/) 的.tar.gz包,解压。通过scp复制到 etcd 和etcdctl到各个主机(每台主机需要配置ssh,可参考博主其他博客)。然后复制到/opt/bin目录下。

配置etcd服务

在每台主机上,分别创建/opt/config/etcd.conf和/lib/systemd/system/etcd.service文件,(注意修改IP地址,和主机名) 
/opt/config/etcd.conf

sudo mkdir -p /var/lib/etcd/
sudo mkdir -p /opt/config/
sudo  cat <<EOF |  sudo tee /opt/config/etcd.conf
ETCD_DATA_DIR=/var/lib/etcd
ETCD_NAME=etcd5
ETCD_INITIAL_CLUSTER=etcd5=http://10.107.20.5:2380,etcd6=http://10.107.20.6:2380,etcd7=http://10.107.20.7:2380,etcd8=http://10.107.20.8:2380,etcd9=http://10.107.20.9:2380
ETCD_INITIAL_CLUSTER_STATE=new
ETCD_LISTEN_PEER_URLS=http://10.107.20.5:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=http://10.107.20.5:2380
ETCD_ADVERTISE_CLIENT_URLS=http://10.107.20.5:2379
ETCD_LISTEN_CLIENT_URLS=http://10.107.20.5:2379,http://127.0.0.1:2379
GOMAXPROCS=$(nproc)
EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

此处五台主机的ETCD_NAME为etcd 5-9,可修改ETCD_NAME为自己起得名字(相应的ETCD_INITIAL_CLUSTER中对应五个名字)。每台主机上修改ETCD_LISTEN_PEER_URLS、ETCD_INITIAL_ADVERTISE_PEER_URLS、ETCD_ADVERTISE_CLIENT_URLS、ETCD_LISTEN_CLIENT_URLS为本机的ip。

/lib/systemd/system/etcd.service

[Unit]
Description=Etcd Server
Documentation=https://github.com/coreos/etcd
After=network.target


[Service]
User=root
Type=simple
EnvironmentFile=-/opt/config/etcd.conf
ExecStart=/opt/bin/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

然后在每台主机上运行如下命令,将etcd加入开机服务并启动

sudo systemctl daemon-reload 
sudo systemctl enable etcd
sudo systemctl start etcd
  • 1
  • 2
  • 3

部署K8s Master

下载Flannel

FLANNEL_VERSION=${FLANNEL_VERSION:-"v0.7.0"}
curl -L https://github.com/coreos/flannel/releases/download/v${FLANNEL_VERSION}/flannel-${FLANNEL_VERSION}-linux-amd64.tar.gz flannel.tar.gz
tar xzf  flannel.tar.gz -C /tmp
  • 1
  • 2
  • 3

如etcd一般,可手动到github上下载,解压。

下载K8s release包,并解压(https://github.com/kubernetes/kubernetes/releases)

复制程序文件

cd /tmp
scp kubernetes/server/bin/kube-apiserver \
     kubernetes/server/bin/kube-controller-manager \
     kubernetes/server/bin/kube-scheduler kubernetes/server/bin/kubelet kubernetes/server/bin/kube-proxy user@10.107.20.5:~/kube
scp flannel-${FLANNEL_VERSION}/flanneld user@10.107.20.5:~/kube
ssh -t user@10.107.20.5 'sudo mv ~/kube/* /opt/bin/'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

将kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、flanneld复制到master主机。

创建证书

在master主机上 ,运行如下命令创建证书

mkdir -p /srv/kubernetes/

cd /srv/kubernetes

export MASTER_IP=10.107.20.5
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=${MASTER_IP}" -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

配置kube-apiserver服务

我们使用如下的Service以及Flannel的网段:

SERVICE_CLUSTER_IP_RANGE=172.18.0.0/16

FLANNEL_NET=192.168.0.0/16

在master主机上,创建/lib/systemd/system/kube-apiserver.service文件,内容如下

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
After=network.target

[Service]
User=root
ExecStart=/opt/bin/kube-apiserver \
 --insecure-bind-address=0.0.0.0 \
 --insecure-port=8080 \
 --etcd-servers=http://10.107.20.5:2379, http://10.107.20.6:2379, http://10.107.20.7:2379, http://10.107.200
.8:2379, http://10.107.20.9:2379 \
 --logtostderr=true \
 --allow-privileged=false \
 --service-cluster-ip-range=172.18.0.0/16 \
 --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,SecurityContextDeny,ResourceQuota \
 --service-node-port-range=30000-32767 \
 --advertise-address=10.107.20.5 \
 --client-ca-file=/srv/kubernetes/ca.crt \
 --tls-cert-file=/srv/kubernetes/server.crt \
 --tls-private-key-file=/srv/kubernetes/server.key
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
  • 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

–etcd_servers:指定etcd服务的URL;–insecure-bind-address:绑定主机的非安全地址,设置0.0.0.0表示绑定所有ip地址;–insecure-port:apiserver绑定主机的非安全端口号,默认为8080;–service-cluster-ip-range:Kubernetes集群中Service的虚拟ip地址范围,以CIDR格式表示,该ip范围不能与物理机的真实ip段有重合。

配置kube-controller-manager服务

在master主机上,创建/lib/systemd/system/kube-controller-manager.service文件,内容如下

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes

[Service]
User=root
ExecStart=/opt/bin/kube-controller-manager \
  --master=127.0.0.1:8080 \
  --root-ca-file=/srv/kubernetes/ca.crt \
  --service-account-private-key-file=/srv/kubernetes/server.key \
  --logtostderr=true
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

配置kuber-scheduler服务

在master主机上,创建/lib/systemd/system/kube-scheduler.service文件,内容如下

[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes

[Service]
User=root
ExecStart=/opt/bin/kube-scheduler \
  --logtostderr=true \
  --master=127.0.0.1:8080
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在master主机上,创建/lib/systemd/system/flanneld.service文件,内容如下

配置flanneld服务

[Unit]
Description=Flanneld
Documentation=https://github.com/coreos/flannel
After=network.target
Before=docker.service

[Service]
User=root
ExecStart=/opt/bin/flanneld \
  --etcd-endpoints="http://10.107.20.5:2379" \
  --iface=10.107.20.5 \
  --ip-masq
Restart=on-failure
Type=notify
LimitNOFILE=65536
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

启动服务

/opt/bin/etcdctl --endpoints="http://10.107.20.5:2379,http://10.107.20.6:2379,http://10.107.20.7:2379,http://10.107.20.8:2379,http://10.107.20.9:2379" mk /coreos.com/network/config '{"Network":"192.168.0.0/16", "Backend": {"Type": "vxlan"}}'

sudo systemctl daemon-reload

sudo systemctl enable kube-apiserver
sudo systemctl enable kube-controller-manager
sudo systemctl enable kube-scheduler
sudo systemctl enable flanneld


sudo systemctl start kube-apiserver
sudo systemctl start kube-controller-manager
sudo systemctl start kube-scheduler
sudo systemctl start flanneld
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

修改Docker服务

source /run/flannel/subnet.env

sudo sed -i "s|^ExecStart=/usr/bin/dockerd -H fd://$|ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU}|g" /lib/systemd/system/docker.service
rc=0
ip link show docker0 >/dev/null 2>&1 || rc="$?"
if [[ "$rc" -eq "0" ]]; then
ip link set dev docker0 down
ip link delete docker0
fi


sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

如果是手动安装的docker则需要去github上下载,docker.service和docker.socket文件到/lib/systemd/system/目录

部署K8s Node

复制程序文件

cd /tmp
for h in master node1 node2 node3 node4; do scp kubernetes/server/bin/kubelet kubernetes/server/bin/kube-proxy user@$h:~/kube; done
for h in master node1 node2 node3 node4; do scp flannel-${FLANNEL_VERSION}/flanneld user@$h:~/kube;done
for h in master node1 node2 node3 node4; do ssh -t user@$h 'sudo mkdir -p /opt/bin && sudo mv ~/kube/* /opt/bin/'; done
  • 1
  • 2
  • 3
  • 4

复制kube-proxy、kubelet到各节点。

配置Flanned以及修改Docker服务

参见Master部分相关步骤: 配置Flanneld服务,启动Flanneld服务,修改Docker服务。注意修改iface的地址

配置kubelet服务(在master上也配置kubelet和kube-proxy)

/lib/systemd/system/kubelet.service,注意修改–hostname-override的IP地址,改为各主机的ip

[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service

[Service]
ExecStart=/opt/bin/kubelet \
  --hostname-override=10.107.20.5 \
  --api-servers=http://10.107.20.5:8080 \
  --logtostderr=true
Restart=on-failure
KillMode=process

[Install]
WantedBy=multi-user.target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

启动服务

sudo systemctl daemon-reload
sudo systemctl enable kubelet
sudo systemctl start kubelet
  • 1
  • 2
  • 3

配置kube-proxy服务

/lib/systemd/system/kube-proxy.service,注意修改IP地址

[Unit]
Description=Kubernetes Proxy
After=network.target

[Service]
ExecStart=/opt/bin/kube-proxy  \
  --hostname-override=10.107.20.5 \
  --master=http://10.107.20.5:8080 \
  --logtostderr=true
Restart=on-failure

[Install]
WantedBy=multi-user.target
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

启动服务

sudo systemctl daemon-reload
sudo systemctl enable kube-proxy
sudo systemctl start kube-proxy
  • 1
  • 2
  • 3

部署DNS

我们设置DNS_SERVER_IP=”172.18.8.8”;DNS_DOMAIN=”cluster.local”;DNS_REPLICAS=1 
在master上创建文件, skydns.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: kube-dns-v17.1
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    version: v17.1
    kubernetes.io/cluster-service: "true"
spec:
  replicas: 1
  selector:
    k8s-app: kube-dns
    version: v17.1
  template:
    metadata:
      labels:
        k8s-app: kube-dns
        version: v17.1
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: kubedns
        image: 10.107.20.5:5000/mritd/kubedns-amd64
        resources:
          # TODO: Set memory limits when we've profiled the container for large
          # clusters, then set request = limit to keep this container in
          # guaranteed class. Currently, this container falls into the
          # "burstable" category so the kubelet doesn't backoff from restarting it.
          limits:
            cpu: 100m
            memory: 170Mi
          requests:
            cpu: 100m
            memory: 70Mi
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        readinessProbe:
          httpGet:
            path: /readiness
            port: 8081
            scheme: HTTP
          # we poll on pod startup for the Kubernetes master service and
          # only setup the /readiness HTTP server once that's available.
          initialDelaySeconds: 30
          timeoutSeconds: 5
        args:
        # command = "/kube-dns"
        - --domain=cluster.local
        - --dns-port=10053
        - --kube-master-url=http://10.107.20.5:8080
        ports:
        - containerPort: 10053
          name: dns-local
          protocol: UDP
        - containerPort: 10053
          name: dns-tcp-local
          protocol: TCP
      - name: dnsmasq
        image: 10.107.20.5:5000/kube-dnsmasq-amd64
        args:
        - --cache-size=1000
        - --no-resolv
        - --server=127.0.0.1#10053
        ports:
        - containerPort: 53
          name: dns
          protocol: UDP
        - containerPort: 53
          name: dns-tcp
          protocol: TCP
      - name: healthz
        image: 10.107.20.5:5000/exechealthz-amd64
        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 10m
            memory: 50Mi
          requests:
            cpu: 10m
            # Note that this container shouldn't really need 50Mi of memory. The
            # limits are set higher than expected pending investigation on #29688.
            # The extra memory was stolen from the kubedns container to keep the
            # net memory requested by the pod constant.
            memory: 50Mi
        args:
        - -cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null
        - -port=8080
        - -quiet
        ports:
        - containerPort: 8080
          protocol: TCP
      dnsPolicy: Default  # Don't use cluster DNS.
---
apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: "KubeDNS"
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 172.18.8.8
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP
  • 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
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121

创建pod和服务

kubectl create -f skydns.yml
  • 1

然后,修该各节点的kubelet.service,添加–cluster-dns=172.18.8.8以及–cluster-domain=cluster.local

此处可能出现问题,kubernetes在创建pod时,还通过启动一个名为google_containers/pause的镜像来实现pod的概念。离线环境需要先下载pause镜像。此处,笔者通过一台嫩够连接上Internet的电脑下载一个docker registry镜像,docker save -o 保存为tar包,拷贝到master主机,docker load 为本地镜像 
运行起来构建一个私有registry。从docker hub下载一个mritd/pause-amd64镜像,docker tag打上标签10.107.20.5:5000/mritd/pause-amd64,推到私有registry。 
之后,给每台Node的kubelet服务的启动参数加上–pod_infra_container_image参数,指定为私有Docker Registry中的pause镜像的地址。–pod_infra_container_image=10.107.20.5:5000/mritd/pause-amd64. 
来另外,kube-dns中庸用到的镜像(kubedns-amd64,kube-dnsmasq-amd64,exechealthz-amd64)也是离线下载推到私有registry中的。需要你自己手动完成这些操作。 
对于客户端对于私有docker registry不能拉取推送的问题。到客户端上配置/etc/docker/daemon.json.添加{“insecure-registries”:[“registry的ip:5000”]} 如 {“insecure-registries”:[“10.107.20.5:5000”]}。

部署Dashboard

在master上创建kube-dashboard.yml文件

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: kubernetes-dashboard
  template:
    metadata:
      labels:
        app: kubernetes-dashboard
      # Comment the following annotation if Dashboard must not be deployed on master
      annotations:
        scheduler.alpha.kubernetes.io/tolerations: |
          [
            {
              "key": "dedicated",
              "operator": "Equal",
              "value": "master",
              "effect": "NoSchedule"
            }
          ]
    spec:
      containers:
      - name: kubernetes-dashboard
        image: 10.107.20.5:5000/mritd/kubernetes-dashboard-amd64
        ports:
        - containerPort: 9090
          protocol: TCP
        args:
          - --apiserver-host=http://10.107.20.5:8080
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 9090
  selector:
    app: kubernetes-dashboard
  • 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
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

kubectl create -f kube-dashboard.yml 
参考dns的部署

查看kubectl describe -f kube-dashboard.yml pod被部署到了哪个节点,查看映射的端口。通过访问被部署到的节点的ip和port就可访问ui页面了。 
这里写图片描述

这里写图片描述

30W年薪的人工智能工程师只是“白菜价”?

机器学习|深度学习|图像处理|自然语言处理|无人驾驶,这些技术都会吗?看看真正的人工智能师都会那些关键技术?年薪比你高多少!

  • kingwmk

    Mark-PINE: kube-dns和kubernetes-dashboard推荐用我最新转载的方式部署,国内可以去网易蜂巢下载对应版本的image镜像部署。(04-01 16:52#3楼)

  • JW_xueZhiXia

    雪之下丶微凉: 请教 博主 子节点是如何注册到集群中的,有类似于join的命令之类的吗?(03-29 22:47#2楼)查看回复(1)

  • kingwmk

    Mark-PINE: 对于客户端对于私有docker registry不能拉取推送的问题。到客户端上配置/etc/docker/daemon.json.添加{"insecure-registries":["registry的ip:5000"]} 如 {"insecure-registries":["10.107.20.5:5000"]}。(03-17 20:57#1楼)

查看 6 条热评

Ubuntu16.04手动部署Kubernetes(1)——Master和Node部署

Okteto:让Kubernetes开发回归IDE本地体验的CLI工具 Kubernetes开发长期面临环境不一致、调试低效、反馈延迟等核心痛点。其本质是传统CI/CD流水线与本地开发工作流之间的语义鸿沟——开发者需要的是‘改保存即生效’的实时性,而非反复构建镜像与滚动部署。Okteto通过轻量级CLI驱动的双向文件同步、SPDY隧道封装和原地容器增强机制,在不模拟集群、不侵入K8s核心组件的前提下,将VS Code等本地IDE与远端Pod深度集成。它复用kubectl认证体系,兼容任意K8s发行版(包括kubekey搭建的Ubuntu 22.04高可用集群),并天然支持Spr 阅读详情

相关推荐

从Jupyter到生产:FastAPI+Docker+K8s+MLflow机器学习部署实战

机器学习模型部署不是简单加载pkl文件,而是涉及环境一致性、资源隔离、可观测性与生命周期管理的系统工程。其核心原理在于通过容器化封装依赖、声明式编排实现弹性伸缩、标准化模型注册保障可复现性,并以异步Web框架支撑高并发推理。该技术方案显著提升服务稳定性与迭代效率,广泛应用于金融风控、电商推荐等实时决策场景。本文聚焦FastAPI、Docker、Kubernetes和MLflow四大关键技术的协同落地,解决模型在真实生产环境中‘跑不稳、扩不动、查不清、换不了’的典型痛点。

weixin_30684743的博客 309

Ubuntu安装kubernetes1.24集群(使用containerd)

初始化kubernetes:kubeadm init --help可以查看命令的具体参数用法。将kubeadm init成功执行后的kubeadm join信息,复制到node节点执行。3台虚拟机,1个master节点,2个node节点。

weixin_37672801的博客 1563

Windows Docker加速与Portainer图形化管理实战指南

Docker镜像拉取慢、容器管理复杂,是Windows开发者高频痛点。其本质源于默认直连海外registry导致网络延迟高,以及原生CLI和Dashboard缺乏可视化、权限控制与中文支持。通过配置国内镜像加速器(如网易、百度源)可将pull速度提升8倍以上;结合Portainer CE的Agent模式部署,能实现容器、网络、卷的Web化纳管,并原生支持中文界面与RBAC。该方案兼顾开发效率与生产稳定性,适用于本地多服务联调、小团队测试环境搭建及非运维背景技术人员快速上手,是Windows下Docker工程

weixin_30667649的博客 424

Ubuntu下Kubernetes(k8s)集群搭建

ubuntu下Kubernetes集群搭建方法

lrclrk的博客 7283

Windows WSL2 原生 Docker 替代 Docker Desktop 实践

Docker 是容器化技术的核心运行时,其稳定性直接决定本地开发效率。在 Windows 平台,Docker Desktop 虽提供图形界面与一键集成,但因深度耦合 WSL2、Hyper-V 及多层代理服务,常引发虚拟化检测失败、localhost 映射异常、资源配额幻觉等隐性故障。本文基于 WSL2 原生架构,详解如何通过直接部署 dockerd 与 docker-cli 组合,剥离黑盒管理层,实现更轻量、可验证、可脚本化的容器运行时。该方案显著提升 `docker run` 和 `docker-comp

weixin_30540691的博客 526

Windows Docker镜像加速与Portainer可视化部署指南

Docker 是一种轻量级容器化技术,通过隔离进程和资源实现应用的可移植部署;其核心依赖 Docker Daemon(dockerd)与镜像仓库通信,而国内网络环境下默认直连 Docker Hub 常导致拉取超时、速度极低。镜像加速器通过配置 registry-mirrors 指向国内 CDN 镜像源(如阿里云),显著优化 DNS 解析、TLS 握手及分发带宽,是提升本地开发效率的基础手段;Portainer 则作为开源容器管理平台,提供 Web 可视化界面,降低 CLI 使用门槛。二者结合,构成 Wind

weixin_33841503的博客 421

【Linux】Ubuntu部署K8S集群-图文并茂(超详细)

基于Ubuntu-server操作系统极速部署K8S集群,开发/运维/测试必备~

我这孩子从小记性就不好,什么东西都要写下来才放心 2万+

OpenClaw本地AI管家安装指南:30分钟部署可操作的AI Agent

AI Agent(智能体)是具备自主性、目标导向与环境交互能力的程序实体,其核心价值在于脱离云端依赖,实现本地化、可审计、低延迟的自动化任务执行。相比LangChain或AutoGen等框架,OpenClaw通过Skill Registry机制、Docker+Ollama轻量栈和CLI可观测设计,真正打通了‘大模型能力’到‘桌面操作’的最后一公里。它支持WhatsApp/Telegram等常用通讯工具作为交互入口,能读取本地文件、调用Excel、访问Outlook邮箱,适用于HR事务处理、产品功能验证及多A

weixin_33782386的博客 418

在ubuntu上运行k8s集群

The preparatory work Close the swap partion We can use sudo vim /etc/fstab to modify.Comment out the line swap.Then reboot server.We can use free -h to verify success. Configure keyless login Use ssh-keygen to initialize the local public and private keys

Yoke 320

GitLab CI与DOKS生产级CI/CD流水线实战指南

CI/CD流水线是现代云原生应用交付的核心基础设施,其本质是将代码变更自动转化为可验证、可发布、可回滚的运行态服务。实现这一目标需兼顾Kubernetes集群稳定性、流水线安全性与开发者体验三重维度。GitLab CI凭借内置权限模型和MR深度集成,天然适配最小权限与审计合规要求;DigitalOcean Managed Kubernetes(DOKS)则通过托管控制平面、预置可观测组件与区域亲和部署,显著降低K8s运维复杂度。二者组合在真实交付中可将MTTD压缩至秒级、MTTI控制在分钟级,支撑灰度发布、

weixin_33675507的博客 394

用Python进行GEO数据挖掘(学习笔记四):富集分析

该笔记详细解释了富集分析的工作原理,并简要地利用gseapy在python中进行富集分析的操作。

m0_64111502的博客 5649

告别踩坑!Ubuntu24.04 基于 kubeadm 部署 Kubernetes 1.30 生产测试集群

本文系统介绍了Kubernetes(K8s)的发展历程和应用部署演进过程,从传统物理机部署到虚拟化时代最终到容器化部署。详细讲解了Kubernetes的核心特性,包括自动化部署、服务发现、存储编排等,并明确区分了Kubernetes与传统PaaS的差异。文章基于VMware+Ubuntu24.04环境,提供了从零搭建v1.30标准三节点集群的完整方案,包含系统配置、网络部署、节点管理等实用命令,特别针对常见问题如swap、镜像拉取等提供了解决方案,适合云原生初学者、CKA备考者和测试环境搭建者参考实践。

Augustsky12138的博客 521

在工作台 LS-DYNA 中检索和变换反作用力分量

在结构仿真中,通常需要由施加的位移或速度边界条件产生的反作用力。此外,通常需要根据用户定义的坐标系解析反作用力分量。在本文中,详细介绍了在Workbench (WB) LS-DYNA 中,相对于用户定义的坐标系检索和变换反作用力分量的过程。

jkh920184196的博客 886

Kubernetes 完整学习指南:架构解析与 kubeadm 集群部署

Kubernetes 是当下主流容器编排标准,本文系统梳理其起源与核心能力,拆解 Master-Worker 整体架构,详解 apiserver、etcd、kubelet 等核心组件作用。实操部分提供 kubeadm 完整集群部署流程,包含系统环境初始化、集群初始化、Calico 网络插件安装,同时补充节点删除、集群重建等运维操作。兼顾理论原理与落地实操,适合运维、云原生从业者从零学习,快速掌握 K8s 架构逻辑与生产集群搭建全流程。

2602_95508776的博客 652

Frida Stalker实战:如何用指令级追踪破解OLLVM混淆的AES算法

本文深入探讨了如何使用Frida Stalker进行指令级追踪,破解经过OLLVM混淆的AES算法。通过动态分析技术,逆向工程师可以精准识别控制流平坦化等混淆手段,还原算法逻辑,特别适用于移动安全领域的加密算法分析。文章提供了详细的配置指南、核心机制解析和实战案例,帮助读者掌握对抗高级代码混淆的有效方法。

weixin_29325955的博客 477

Fortify SCA 24.4 最新可用版

Fortify Static Code Analyzer(Fortify SCA) 是一款由 Micro Focus(原惠普旗下)开发的 静态应用安全测试(SAST)工具,专注于在软件开发早期通过分析源代码或编译后的二进制文件,识别潜在的安全漏洞、代码缺陷和合规性问题。以下是其核心特点与功能:核心功能 静态代码分析 在不运行程序的情况下,通过语法、语义分析检测代码中的安全漏洞(如 SQL 注入、跨站脚本(XSS)、缓冲区溢出等)和代码质量问题。

棉花糖的博客 3185

Kubernetes 集群搭建全解:架构剖析与 kubeadm 生产级部署实战

Kubernetes(K8s)是用于自动化部署、管理和扩展容器化应用的开源系统。文章首先回顾了应用部署的演进:从传统物理服务器部署的资源分配问题,到虚拟化部署的资源隔离优化,再到容器化部署的轻量级特性与跨平台优势。随后详细介绍了Kubernetes的核心特性,包括自动化运维、服务发现、存储编排、配置管理、自我修复等。最后解析了Kubernetes架构,包含控制平面组件(如API Server、调度器)、工作节点组件(如kubelet、kube-proxy)以及各类功能插件(如DNS、Dashboard)。K

qq_74180789的博客 424

ESP32搭配LVGL显示图片的两种方法详解:内部存储 vs 外部文件

本文详细介绍了ESP32搭配LVGL显示图片的两种方法:内部存储与外部文件。内部存储方案适合快速响应的小图片,而外部文件方案则适用于需要灵活更新和大容量图片的场景。通过对比分析,帮助开发者根据项目需求选择最优方案,提升嵌入式系统的UI性能。

weixin_30399821的博客 519

K8s 核心组件使用指南

Kubeadm是一个提供了和的工具, 作为创建Kubernetes集群的 “快捷途径” 的最佳实践。kubeadm通过执行必要的操作来启动和运行最小可用集群。按照设计,它只关注启动引导,而非配置机器。同样的, 安装各种 “锦上添花” 的扩展,例如 Kubernetes Dashboard、 监控方案、以及特定云平台的扩展,都不在讨论范围内。相反,k8s官方希望在kubeadm之上构建更高级别以及更加合规的工具, 理想情况下,使用kubeadm作为所有部署工作的基准将会更加易于创建一致性集群。

nRks5Qp11的博客 215

【华为OD机试真题 新系统】1029、字符串处理 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1029、字符串处理 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od,

KJ.JK 221

华为OD机试真题 新系统2026-04-01 Python&JS【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 3250

测试工程师必学:从零搭建容器化测试环境实战指南

测试环境是软件测试工作的底层基石,其本质是可复现、可隔离、可验证的软硬件组合。理解Linux基础命令、Docker容器化原理与K8s编排逻辑,能有效解决环境漂移、服务耦合与资源污染等高频问题。容器化部署不仅提升测试效率,更直接支撑CI/CD流水线调试、接口/性能测试及云原生场景验证。当前93%的头部科技公司已全面采用Docker作为测试环境标准载体,而K8s正成为进阶能力分水岭。本指南聚焦真实工作流中的五类刚性需求——面试演示、入职即战、中间件版本控制、CI/CD协同与云平台适配,提供覆盖Windows/m

weixin_30699955的博客 388

CDR插件开发之CPG插件004 - 认识VGCore并编译生成你的第一个CPG文件

上篇文章中,讲到了使用VS2019编译CDR类型库 VGCoreAuto.tlb,编译后得到了vgcoreauto.tlh和vgcoreauto.tli两个文件。本文将对这两个文件说明,并演示通过标准的libid形式来导入CDR类型库,在这个过程中,穿插一些VS2019的使用技巧(删除目录、复制工程、打开项目或解决方案、修改解决方案名称、修改项目名称等),使读者循序渐进,逐步提高对VS2019工具的熟练程度,最后通过修改项目属性配置,生成第一个CPG文件。

Zebe 2986

Docker 高级技术:中间件部署与分布式云原生实践指南(二)

本文介绍了关于安装部署各类中间件以及docker compose,network,volume等高级特性

欢迎来到烟火气知识小天地!这里记录生活、工作中的 “小麻烦”,从软件故障到生活难题,我会毫无保留分享解决思路与方法,愿成为你排忧解难时的温暖参考,伴你在解决问题路上稳步前行。 4391

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: k8s中文网站
下一篇: https://github.com/liuyi01/kubernetes-starterhttps://github.com/liuyi01/kubernetes-starter
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值