(二)搭建一个完成的Kubernetes/K8s集群v.1.16


单节点集群

多节点集群 注意node通过连接loadbalancer 转发到mateter 的apiserver来进行运作的
集群规划:

角色 ip 组件
K8S-master1 192.168.0.101 kube-apiserver kube-controller-manager kube-scheduleretcd
K8S-master2 192.168.0.102 kube-apiserver kube-controller-manager kube-scheduleretcd
K8S-node1 192.168.0.103 kubelet kube-proxy docker etcd
K8S-node2 192.168.0.104 kubelet kube-proxy docker etcd
K8S-load-balancer 192.168.0.106(vip)实际IP105 Nginx L4

1,系统初始化

##关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld

##关闭selinux:
setenforce 0 ## 临时
sed -i ‘s/enforcing/disabled/‘ /etc/selinux/config ## 永久

##关闭swap:
swapoff -a  ## 临时
vim /etc/fstab ##将swap 那一行注释掉

##同步系统时间:
ntpdate time.windows.com   ##同步时间可能需要安装ntp服务器 同步内网时间
ntpdate 192.168.0.101

##添加hosts:
vim /etc/hosts
192.168.0.101 k8s-master1
192.168.0.102 k8s-master2
192.168.0.103 k8s-node1
192.168.0.104 k8s-node2

##修改主机名:
hostnamectl set-hostname k8s-master1

2,etcd集群安装
(1)证书签发(注意 etcd集群是双向证书)

# cd TLS/etcd
安装cfssl工具:
# ./cfssl.sh
#curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
#curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
#curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
cp -rf cfssl cfssl-certinfo cfssljson /usr/local/bin
chmod +x /usr/local/bin/cfssl*

修改请求文件中hosts字段包含所有etcd节点IP:
# vi server-csr.json (签发具体域名配置)
{
    "CN": "etcd",
    "hosts": [
        "192.168.0.101",
        "192.168.0.103",
        "192.168.0.104"
        ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        }
    ]
}

生成ca根证书文件

{
    "CN": "etcd CA",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing"
        }
    ]
}

签发etcd双向证书配置文件

{
  "signing": {
    "default": {
      "expiry": "876000h"
    },
    "profiles": {
      "www": {
         "expiry": "876000h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}

生成ca根证书

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

签发etcd证书

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

etcd 安装所需文件(注意文件路径)
etcd.service,/usr/lib/systemd/system,etcd/ssl/{ca,server,server-key}.pem ,/etcd/bin/etcd,/etcd/bin/etcdctl.etcd.config

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd         --name=${ETCD_NAME}         --data-dir=${ETCD_DATA_DIR}         --listen-peer-urls=${ETCD_LISTEN_PEER_URLS}         --listen-client-urls=${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379         --advertise-client-urls=${ETCD_ADVERTISE_CLIENT_URLS}         --initial-advertise-peer-urls=${ETCD_INITIAL_ADVERTISE_PEER_URLS}         --initial-cluster=${ETCD_INITIAL_CLUSTER}         --initial-cluster-token=${ETCD_INITIAL_CLUSTER_TOKEN}         --initial-cluster-state=new         --cert-file=/opt/etcd/ssl/server.pem         --key-file=/opt/etcd/ssl/server-key.pem         --peer-cert-file=/opt/etcd/ssl/server.pem         --peer-key-file=/opt/etcd/ssl/server-key.pem         --trusted-ca-file=/opt/etcd/ssl/ca.pem         --peer-trusted-ca-file=/opt/etcd/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

etcd.config

#[Member]
ETCD_NAME="etcd-1"    ##集群里节点名称(唯一)
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"  ##存放路径
ETCD_LISTEN_PEER_URLS="https://192.168.0.101:2380"    ##内部互相通信监听端口
ETCD_LISTEN_CLIENT_URLS="https://192.168.0.101:2379"  ##外部通信监听端口 比如面向apiserver

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.0.101:2380"   ##集群里内部通信端口
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.0.101:2379"          ##集群外部通信端口
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.0.101:2380,etcd-2=https://192.168.0.103:2380,etcd-3=https://192.168.0.104:2380"        ##集群里 其他节点名称 地址 和监听端口
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"      ## 集群内认证口令 字符串 可以随便改 但是得统一
ETCD_INITIAL_CLUSTER_STATE="new"            ##集群的状态 new 是新建 exsiting 表示已有集群 然后新增加

所有etcd节点

systemctl daemon-reload
systemctl restart etcd
systemctl enable etcd
##在启动的时候 其他节点会等候加入,在所有节点起来后才会启动,如有问题查询/var/log/message 系统启动日志
##验证节点是否健康正常运行
/opt/etcd/bin/etcdctl --ca-file=/opt/etcd/ssl/ca.pem --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.0.101:2379,https://192.168.0.103:2379,https://192.168.0.104:2379" cluster-health

3,master节点安装
自签api ssl 证书(注意此时跟etcd 不是用的同一套ca)
ca根证书

vim ca-config.json
{
  "signing": {
    "default": {
      "expiry": "876000h"
    },
    "profiles": {
      "kubernetes": {
         "expiry": "876000h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}

vim ca-csr.json
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}

api-server

server-csr.json
{
    "CN": "kubernetes",                  ##K8S证书官方规定使用默认字段名
            "hosts": [
            "10.0.0.1",                              ##service 内部集群通信的第一个IP 地址
      "127.0.0.1",
      "kubernetes",                         ##官方规定的需要添加进入证书的名称
      "kubernetes.default",
      "kubernetes.default.svc",
      "kubernetes.default.svc.cluster",
      "kubernetes.default.svc.cluster.local",
      "192.168.0.100",                    ##master api server 地址 包括自己本身,已经需要访问的load balance 地址(通过lb 访问可以不用添加node地址)
      "192.168.0.101",
      "192.168.0.102",
      "192.168.0.103",
      "192.168.0.104",
      "192.168.0.105"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}

##worker-node节点 kube-proxy 证书 注意CN 字段名
kube-proxy.json
{
  "CN": "system:kube-proxy",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}

签发

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
##生成apiserver 证书 以及kube-proxy证书

安装启动

tar zxvf k8s-master.tar.gz
cd kubernetes
cp TLS/k8s/ssl/*.pem ssl
cp –rf kubernetes /opt
cp kube-apiserver.service kube-controller-manager.service kube-scheduler.service /usr/lib/systemd/system
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
#为kubelet TLS Bootstrapping 授权
cat /opt/kubernetes/cfg/token.csv
##c47ffb939f5ca36231d9e3121a252940,kubelet-bootstrap,10001,"system:node-bootstrapper"
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap

kube-apiserver.conf

KUBE_APISERVER_OPTS="--logtostderr=false \  ##输出日志
--v=2 \  ##输出日志级别
--log-dir=/opt/kubernetes/logs \  ##日志存放位置
--etcd-servers=https://192.168.31.61:2379,https://192.168.31.62:2379,https://192.168.31.63:2379 \   ##etcd地址
--bind-address=192.168.31.61 \ ##绑定的IP,可以用公网地址
--secure-port=6443 \  ##监听端口
--advertise-address=192.168.31.61 \    ##通告地址,一般和本机IP一样,告诉node通过哪个IP来链接访问
--allow-privileged=true \  #允许创建的容器具有超级管理员权限
--service-cluster-ip-range=10.0.0.0/24 \    #service IP范围,service会分配这个IP段的IP地址
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \ #启用控制插件,属于k8s高级功能,比如资源配额限制,访问控制等
--authorization-mode=RBAC,Node \  #授权模式,一般使用rbac角色来访问
--enable-bootstrap-token-auth=true \ #启用bootstrap,为node用户请求自动颁发证书,在token.csv 定义具体权限内容。
--token-auth-file=/opt/kubernetes/cfg/token.csv --service-node-port-range=30000-32767 \    ## server 服务暴露的端口
--kubelet-client-certificate=/opt/kubernetes/ssl/server.pem \  ##kubelet证书
--kubelet-client-key=/opt/kubernetes/ssl/server-key.pem --tls-cert-file=/opt/kubernetes/ssl/server.pem  \        ##apiserver使用https证书
--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \
--client-ca-file=/opt/kubernetes/ssl/ca.pem --service-account-key-file=/opt/kubernetes/ssl/ca-key.pem --etcd-cafile=/opt/etcd/ssl/ca.pem \   ###etcd 证书
--etcd-certfile=/opt/etcd/ssl/server.pem --etcd-keyfile=/opt/etcd/ssl/server-key.pem --audit-log-maxage=30 \     #日志审计配置
--audit-log-maxbackup=3 --audit-log-maxsize=100 --audit-log-path=/opt/kubernetes/logs/k8s-audit.log"

kube-controller-manager.conf 配置文件

KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=false \ ##配置日志
--v=2 \ #配置日志级别
--log-dir=/opt/kubernetes/logs \ #配置日志目录
--leader-elect=true \  #集群选举,api server才做高可用, kube-controller-manager本身会基于etcd来实现高可用,启用该选项即可
--master=127.0.0.1:8080 \  #apiserver的IP,我们设置链接本地,8080是apiserver监听端口,它默认会开放该端口
--address=127.0.0.1 \ #组件监听地址,本地即可,无需对外
--allocate-node-cidrs=true \   ##允许安装cni网络的插件
--cluster-cidr=10.244.0.0/16 \   ##pod的地址池
--service-cluster-ip-range=10.0.0.0/24 \ #server的IP范围,和 kube-apiserverIP范围是一样的

#集群签名的证书,node加入集群颁发自动颁发kubelet证书,kubelet由controller-manager颁发,controller-manager由下面配置的颁发
--cluster-signing-cert-file=/opt/kubernetes/ssl/ca.pem --cluster-signing-key-file=/opt/kubernetes/ssl/ca-key.pem
#签署service-account所需要的私钥
--root-ca-file=/opt/kubernetes/ssl/ca.pem --service-account-private-key-file=/opt/kubernetes/ssl/ca-key.pem
#为node颁发证书时间,10年
--experimental-cluster-signing-duration=87600h0m0s"

kube-scheduler.conf

KUBE_SCHEDULER_OPTS="--logtostderr=false --v=2 --log-dir=/opt/kubernetes/logs --leader-elect \ #多个scheduler集群选举
--master=127.0.0.1:8080 \  #链接apiserver地址
--address=127.0.0.1" #监听本地地址

4,部署node 组件
kubelet,kube-proxy,docker
4.1,安装docker

tar zxvf k8s-node.tar.gz
tar zxvf docker-18.09.6.tgz
mv docker/* /usr/bin
mkdir /etc/docker
mv daemon.json /etc/docker
mv docker.service /usr/lib/systemd/system
systemctl start docker
systemctl enable docker
docker info   ##查看docker信息 比如仓库配置等

4.2.安装kubelet 以及 kube-proxy(注意更改节点名称,以及部署的masterIP)

bootstrap.kubeconfig 下的server要为master的IP
kube-proxy.kubeconfig 下的server要为master的IP
kubelet.conf 下的hostname-override 注册节点名称要唯一
kube-proxy-config.yml 下的hostnameOverride 注册节点名称要唯一
配置文件后缀含义
.conf #基本配置文件
.kubeconfig #链接apiserver的配置文件
.yml #主要配置文件(动态更新配置文件)
kubernetes/
├── bin
│ ├── kubectl
│ └── kube-proxy
├── cfg
│ ├── bootstrap.kubeconfig #请求证书的配置文件
│ ├── kubelet.conf
│ ├── kubelet-config.yml#动态调整kubelet配置
│ ├── kube-proxy.conf
│ ├── kube-proxy-config.yml #动态调整proxy配置
│ └── kube-proxy.kubeconfig #是链接apiserver的组件
├── logs
└── ssl

 vim kubelet.conf
##输出以下内容:
KUBELET_OPTS="--logtostderr=false \ #日志
--v=2 \ #日志级别
--log-dir=/opt/kubernetes/logs \ #日志目录
--hostname-override=k8s-node1 \ #节点名称,名称必须唯一,每个节点都要改一下
--network-plugin=cni \ #启用网络插件

##指定配置文件路径
--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig --bootstrap-kubeconfig=/opt/kubernetes/cfg/bootstrap.kubeconfig --config=/opt/kubernetes/cfg/kubelet-config.yml --cert-dir=/opt/kubernetes/ssl \ #指定为节点颁发的证书存放目录
--pod-infra-container-image=lizhenliang/pause-amd64:3.0" #启动pod的镜像,这个pod镜像主要是管理pod的命名空间
bootstrap.kubeconfig
##输出以下内容:
apiVersion: v1
clusters:
- cluster:
certificate-authority: /opt/kubernetes/ssl/ca.pem
server: https://192.168.0.101:6443 #master1服务器IP(内网IP)
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kubelet-bootstrap
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: kubelet-bootstrap
user:
token: c47ffb939f5ca36231d9e3121a252940
##token要与/opt/kubernetes/cfg/token.csv 里面的token一致
##k8s为了解决kubelet颁发证书的复杂性,所以引入了bootstrap机制,自动的为将要加入到集群的node颁发kubelet证书,所有链接apiserver的都需要证书。

bootstrap工作流程(带tenken 验证,在请求通过后会生成kubelet.kubeconfig)

kubelet-config.yml
#输出以下内容:
kind: KubeletConfiguration #使用对象
apiVersion: kubelet.config.k8s.io/v1beta1 #api版本
address: 0.0.0.0 #监听地址
port: 10250 #当前kubelet的端口
readOnlyPort: 10255 #kubelet暴露的端口
cgroupDriver: cgroupfs #驱动,要于docker info显示的驱动一致
clusterDNS:
- 10.0.0.2
clusterDomain: cluster.local  #集群域
failSwapOn: false #关闭swap
#访问授权
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 2m0s
enabled: true
x509:
clientCAFile: /opt/kubernetes/ssl/ca.pem
##pod 优化参数
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 5m0s
cacheUnauthorizedTTL: 30s
evictionHard:
imagefs.available: 15%
memory.available: 100Mi
nodefs.available: 10%
nodefs.inodesFree: 5%
maxOpenFiles: 1000000
maxPods: 110
kube-proxy.kubeconfig
#输出以下内容:

apiVersion: v1
clusters:
- cluster:
certificate-authority: /opt/kubernetes/ssl/ca.pem #指定ca
server: https://192.168.0.101:6443
#masterIP地址(内网)
name: kubernetes
contexts:
- context:
cluster: kubernetes
user: kube-proxy
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: kube-proxy
user:
client-certificate: /opt/kubernetes/ssl/kube-proxy.pem
client-key: /opt/kubernetes/ssl/kube-proxy-key.pem
kube-proxy-config.yml
#输出以下内容:
 kind: KubeProxyConfiguration
apiVersion: kubeproxy.config.k8s.io/v1alpha1
address: 0.0.0.0 #监听地址
metricsBindAddress: 0.0.0.0:10249 #监控指标地址,监控获取相关信息 就从这里获取
clientConnection:
kubeconfig: /opt/kubernetes/cfg/kube-proxy.kubeconfig #读取配置文件
hostnameOverride: k8s-node1 #注册到k8s的节点名称唯一
clusterCIDR: 10.0.0.0/24
mode: ipvs #模式,使用ipvs(性能比较好),默认是IPtables
ipvs:
scheduler: "rr"
iptables:
masqueradeAll: true

安装启动

##在签发 证书的机器上分发证书到node 节点(3个证书 ca.pem,kube-proxy.pem,kube-proxy.key)
cd TLS/k8s
scp ca.pem kube-proxy*.pem [email protected]:/opt/kubernetes/ssl/
##在nodejiqi
tar zxvf k8s-node.tar.gz
mv kubernetes /opt
cp kubelet.service kube-proxy.service /usr/lib/systemd/system

##修改以下2个文件中IP地址:(master地址)
 grep 192 *
bootstrap.kubeconfig:    server: https://192.168.0.101:6443
kube-proxy.kubeconfig:    server: https://192.168.0.101:6443
##修改以下两个文件中主机名:(改正成之前规定好的主机名)
grep hostname *
kubelet.conf:--hostname-override=k8s-node1 kube-proxy-config.yml:hostnameOverride: k8s-node1
##启动,设置开机启动
systemctl start kubelet
systemctl start kube-proxy
systemctl enable kubelet
systemctl enable kube-proxy
##启动后kubne-proxy会出现Failed to delete stale service IP 10.0.0.2 connections
yum -y install yum -y install conntrack 解决
###启动后在master上
kubectl get csr  ## 如果启动没问题 会显示node 节点kubelet请求颁发证书
##允许给node 颁发证书 后半段是get csr 显示的内容
kubectl certificate approve node-csr-MYUxbmf_nmPQjmH3LkbZRL2uTO-_FCzDQUoUfTy7YjI
##查看node
kubectl get node
##(会显示NotReady  不影响 这是因为还没不是cni 网络插件的原因)

4.3安装cni网络插件和flannel网络
cni是k8s的一个接口,如果需要对接k8s就需要遵循cni接口标准,部署cni主要是为了接通第三方网络
需要做的:
cni安装到每台node节点
flannel安装到master节点
4.3.1,安装cni

#下载安装包cni
wget https://github.com/containernetworking/plugins/releases/download/v0.8.5/cni-plugins-linux-amd64-v0.8.5.tgz

##解压安装包cni
mkdir -p /opt/cni/bin #工作目录
mkdir -p /etc/cni/net.d #配置文件
tar -zxvf cni-plugins-linux-amd64-v0.8.5.tgz -C /opt/cni/bin

4.3.2master节点安装flannel

kubectl apply -f   kubectl apply -f kube-flannel.yaml
##这个flannel只需要安装到master节点上
##这个文件需要***,下载到服务器后直接执行 kubectl apply -f kube-flannel.yml(里面的镜像需要***,直接安装国外的会失败,不建议)
##yaml里面的网络net-conf.json要和 cat /opt/kubernetes/cfg/kube-controller-manager.conf 里面的cluster-cidr值一致
##如果不使用flannel,其他的组件也一样
##安装好后,每个node都会启动一个pod

5,部署webui
官方部署:

https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/
##在master安装 注意更改暴露的端口
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
kubectl apply -f recommended.yaml

修改部署:

kubectl apply -f dashboard.yaml
kubectl get pods -n kubernetes-dashboard
#输出以下内容
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-76585494d8-sbzjv 1/1 Running 0 2m6s
kubernetes-dashboard-5996555fd8-fc7zf 1/1 Running 2 2m6s

#查看端口
kubectl get pods,svc -n kubernetes-dashboard

#输出以下内容
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/dashboard-metrics-scraper ClusterIP 10.0.0.8 <none> 8000/TCP 16m
service/kubernetes-dashboard NodePort 10.0.0.88 <none> 443:30001/TCP
#使用任意node节点IP+端口即可访问
https://nodeip:300001

我们使用token方式来登录,创建service account并绑定默认cluster-admin管理员集群角色

kubectl apply -f dashboard-adminuser.yaml
#获取token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk ‘{print $1}‘)

由于证书问题 部分浏览器并不能登录 比如chorm,这时候 还需要给dashboard 签发一个自签证书 以支持多种浏览器

mkdir key && cd key
#生成证书
openssl genrsa -out dashboard.key 2048
openssl req -new -out dashboard.csr -key dashboard.key -subj ‘/CN=kubernetes-dashboard-certs‘
openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
#删除原有的证书secret
kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
#创建新的证书secret
kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kube-system
#查看dashboard pod,v2.0是 -n kubernetes-dashboard
kubectl get pod -n kube-system
#重启dashboard pod,v2.0是 -n kubernetes-dashboard
kubectl delete pod <pod name> -n kube-system

部署DNS(DNS 是为service 提供解析 kubectl get svc里的)
功能:可以通过svc的名称去访问到svc 然后svc转发到对应的pod

kubectl apply -f coredns.yaml
##注意:clusterIP要和node节点的cat /opt/kubernetes/cfg/kubelet.conf 的clusterDNS一致,否则pod会解析失败
##查看dns
kubectl get pods -n kube-system

##输出以下内容:
coredns-6d8cfdd59d-mw47j 1/1 Running 0 5m45s
##测试
##安装busybox工具
kubectl apply -f bs.yaml

##查看我们启动的pod
kubectl get pods

##进入容器内部
kubectl exec -t busybox sh

##测试
ping kubernetes

原文地址:https://blog.51cto.com/1014810/2474723

时间: 2024-10-10 19:00:15

(二)搭建一个完成的Kubernetes/K8s集群v.1.16的相关文章

kubernetes (K8S) 集群的搭建方式

kubernetes (K8S) 集群的搭建方式有两种: 守护进程模式和容器模式 (请注意看图,不一样的) 容器的编排管理工具,当然推荐使用容器来部署了.不过容器镜像是在 Google 云上的,需要各位各显神通了. container部署: systemd模式部署: 原文地址:https://www.cnblogs.com/liuxgcn/p/11154259.html

Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之部署master/node节点组件(四)

0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 1.部署master组件 master 服务器的组件有:kube-apiserver.kube-controller-manager.kube-scheduler 因此需要下载k8s master,下载地址:https://github.com/kubernetes/kubernetes/blob/master/CHANGE

Kubernetes(K8S)集群在centos7.4下创建

自己在搭Kubernetes(K8S)集群下遇到的坑写一点随笔. 本次采用192.168.60.21,192.168.60.22,192.168.60.23作为需要装的服务器. master需要安装etcd, flannel,docker, kubernetes   192.168.60.21 yum –y install etcd yum –y install flannel yum –y install docker yum –y install kubernetes 分支上安装flanne

(一)Kubernetes/K8s 集群架构与组件

K8s相关概念:master/nodemaster Master 是 Cluster 的大脑,它的主要职责是调度,即决定将应用放在哪里运行,实现高可用,可以运行多个 Master.运行的相关组件:Kubernetes API Server(kube-apiserver),集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储.Kubernetes Controller Manager,处理集群中常规后

搭建一个分布式MongoDB鉴权集群

今天休假在家,测试并搭建了一个replica set shard MongoDB鉴权集群.replica set shard 鉴权集群中文资料比较少,本文是个人笔记,同时也希望对后来者有所帮助.本文仅是搭建步骤和Q&A,用于实际工作中的使用查阅,阅读者需要有分布式集群的理论基础. 关键字:Replica-Set Shard 副本 分片 鉴权 KeyFile auth MongoDB根据部署的不同,有两种添加鉴权的方式,分别是单实例的鉴权方式和KeyFile的鉴权方式.两种方式的共同点都是,先在没

Docker 搭建一个Elasticsearch 7.5.1集群+kibana 7.5.1

1.docker安装elasticsearch 7.5.1 拉取镜像 docker pull elasticsearch:7.5.1 创建网络 如果需要安装kibana等其他,需要创建一个网络,名字任意取,让他们在同一个网络,使得es和kibana通信 docker network create esnet(这个名字可以自定义,但是注意启动kibana是名字保持一致) 创建数据卷 此处为了docker容器删除或者其他异常情况,将ES的重要数据挂载到宿主机 # 查看当前数据局列表 docker v

搭建一个三台服务器的Memcached集群

关于memcached的基础知识可以查看博客其他博文,这里只记录了搭建的过程,谢谢! 1.分别在三台服务器上安装Memcached并启动 第一.由于memcached是基于libevent的事件处理,所以需要安装libevent yum install libevent libevent-devel 第二.上传Memcached到三台服务器(192.168.176.129/192.168.176.130/192.168.176.131)解压并安装 tar -zxvf memcached-1.2.

kubernetes(k8s)集群安装calico

添加hosts解析 cat /etc/hosts 10.39.7.51 k8s-master-51 10.39.7.57 k8s-master-57 10.39.7.52 k8s-master-52 下载calico wget http://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/calico.yaml 下载所需镜像 # 建议下载后 推到自己的镜像仓库 [[email protected

Kubernetes(K8s)(二)——搭建Kubernetes容器集群管理系统

(1).配置说明 节点角色 IP地址 CPU 内存 master.etcd 192.168.128.110 4核 2G node1/minion1 192.168.128.111 4核 2G node2/minion2 192.168.128.112 4核 2G (2).搭建Kubernetes容器集群管理系统 1)三台主机安装常用的软件包 bash-completion可以使得按<Tab>键补齐,vim是vi编辑器的升级版,wget用于下载阿里云的yum源文件. # yum -y insta