基于kubeasz3.2.0搭建k8s:v1.23.1

1)环境准备

注意:

  • 由于安装过程需要githar拉取镜像,建议先将所有镜像都下载下来,push到自己的服务harbor服务器上,这样可以大大缩短部署时间;
  • 安装过程中,一些config.yml中的组件版本变量需要替换,请提前替换完成,不然会05之后会因为变量未替换二造成镜像下载失败;

所有机器centos7(需升级内核)

A类地址:10.0.0.0       ~     10.255.255.255

B类地址:172.16.0.0   ~     172.31.255.255

C类地址:192.168.0.0 ~     192.168.255.255 

规划机器和地址:

image

server网段使用:10.200.0.0/16

node的网段:172.20.0.0/16

vip:192.168.37.220

组件及版本:

kubeasz_3.2.0.tar

docker-20.10.9.tgz

metrics-server_v0.5.2.tar

metrics-scraper_v1.0.7.tar

coredns_1.8.6.tar

k8s-dns-node-cache_1.21.1.tar

nfs-provisioner_v4.0.2.tar

dashboard_v2.4.0.tar

pause_3.6.tar

calico_v3.19.3.tar

flannel_v0.15.1.tar

k8s:v1.23.1

  • 升级centos7的内核:

# 载入公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装ELRepo
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 载入elrepo-kernel元数据
yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
# 查看可用的rpm包
yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel*
# 安装长期支持版本的kernel
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt.x86_64
# 删除旧版本工具包
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y
# 安装新版本工具包
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt-tools.x86_64

#查看默认启动顺序
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
clipboard

#默认启动的顺序是从0开始,新内核是从头插入(目前位置在0,而4.4.4的是在1),所以需要选择0。 grub2-set-default 0 #重启并检查 reboot

#完成后可以删除旧的内核,查看系统中全部的内核RPM包:

rpm -qa | grep kernel
  • 修改主机名称

hostnamectl set-hostname k8s-haproxy1.taozi.net

更新yum源:

cat > /etc/yum.repos.d/epel.repo << EOF
[tengxun]
name=tengxun epel
baseurl=https://mirrors.cloud.tencent.com/centos/\$releasever/os/\$basearch/
gpgcheck = 1
gpgkey = https://mirrors.cloud.tencent.com/centos/\$releasever/os/\$basearch/RPM-GPG-KEY-CentOS-$releasever
enabled = 1

[qinghua]
name=qinghua epel
baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/\$releasever/os/\$basearch/
#1表示开启,0表示关闭
gpgcheck = 1
gpgkey = https://mirrors.tuna.tsinghua.edu.cn/centos/\$releasever/os/\$basearch/RPM-GPG-KEY-CentOS-$releasever
enabled = 1

[ali]
name=sohu epel
baseurl=http://mirrors.aliyun.com/epel/7/\$basearch
gpgcheck = 0
enabled = 1

[sohu]
name=sohu epel
baseurl=http://mirrors.sohu.com/fedora-epel/7/x86_64/
gpgcheck = 0
enabled = 1
EOF
yum clean all
yum repolist all

安装运行环境,在每个master和node安装python2(ubuntu是python2.7):

yum install -y conntrack-tools ipvsadm nfs-utils psmisc rsync socat python

时间同步:

ntpdate time1.aliyun.com && hwclock -w
  • 准备haproxy的代理:

#在105和106上安装keepalived和haproxy

yum install keepalived haproxy -y

#配置keepalived

#在106上修改keepalived的配置文件,先复制

cp /usr/share/doc/keepalived-1.3.5/samples/keepalived.conf.vrrp /etc/keepalived/keepalived.conf vim /etc/keepalived/keepalived.conf

clipboard

systemctl restart keepalived.service ip a

clipboard

在107上同样进行配置:

修改拷贝105上的配置文件修改被备用节点和优先级即可;

vim /etc/keepalived/keepalived.conf

clipboard

验证:停止106主节点的keepalived服务,验证VIP漂移正常;

配置haproxy:

listen k8s_api_node_6443
    bind 192.168.37.220:6443
    #这里mode一定要选用tcp协议
    mode tcp
    server k8s-master1 192.168.37.102:6443 check inter 2000 fall 3 rise 5
    #server k8s-master2 192.168.37.103:6443 check inter 2000 fall 3 rise 5
    #server k8s-master3 192.168.37.104:6443 check inter 2000 fall 3 rise 5

listen haproxy-status
    bind :9999
    stats enable
    #stats hide-version 
    stats uri  /haproxy-status
    stats realm HAProxy\ Stats\ Page
    #stats auth haadmin:123456
    stats auth admin:123456
    #stats refresh 30
    #stats admin if TRUR 
#修改内核参数,因为keepalived,没有拿到VIP的主机,将会无法启动haproxy
echo "net.ipv4.ip_nonlocal_bind = 1" > /etc/sysctl.d/99-sysctl.conf
sysctl -p
systemctl enable --new  haproxy.servic

107上执行同样操作。

  • haror仓库准备:

清华园最新安装包下载地址:https://mirrors.tuna.tsinghua.edu.cn/github-release/

1)安装docker

安装依赖3个源:

wget -O /etc/yum.repos.d/Docker-Centos-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/Docker-epel.repo http://mirrors.aliyun.com/repo/epel-7.repo wget -O /etc/yum.repos.d/Docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#列出历史版本的docker

yum search --showduplicates docker

#选出对应版本进行安装

yum install docker-ce-19.03.5-3.el7 docker-ce-cli-19.03.5-3.el7 -y systemctl enable --now docker docker version

查看docker版本

clipboard

#使用阿里做镜像加速

mkdir -p /etc/docker cat > /etc/docker/daemon.json <<EOF

{ "registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"] }

EOF

2)安装docker-compose

#方法1: 官网直接下载,版本较新docker_compose,推荐使用

#curl -L https://github.com/docker/compose/releases/download/1.25.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
curl -L https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose  --version

#方法2: 直接安装,版本较旧docker-compose,不推荐使用

yum -y install docker-compose docker-compose --version

clipboard

3)配置文件和生成证书,安装harbor.v2.1.0.tar.gz

tar xvf harbor-offline-installer-v2.1.0.tgz -C /apps/harbor/ cp /apps/harbor/harbor.yml.tmpl /apps/harbor/harbor.yml vim /apps/harbor/harbor.yml

#修改hostname证书路径

clipboard

#修改登录密码:

clipboard

#生成证书文件

mkdir /apps/harbor/certs/
cd /apps/harbor/certs/
#生成秘钥和自签名根证书:
openssl req  -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509  -subj "/CN=ca.taozi.net" -days 7300 -out ca.crt
#由于gogo1.15版本以后废弃CommonName,下面的生成harbor的证书命令已不能使用,(生成harbor主机的证书申请)
#openssl req  -newkey rsa:4096 -nodes -sha256 -subj "/CN=k8s-harbor.taozi.net" -keyout k8s-harbor.taozi.net.key -out k8s-harbor.taozi.net.csr
#由于gogo1.15版本以后废弃CommonName,下面的生成harbor的证书命令已不能使用,给harbor主机颁发证书
#openssl x509 -req -in k8s-harbor.taozi.net.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 7300 -out k8s-harbor.taozi.net.crt

#新本的申请方法如下:
#用根的秘钥生成申请文件:
openssl req -new -sha256 \
    -key ca.key \
    -subj "/C=CN/ST=sahnxi/L=xian/O=UnitedStack/OU=Devops/CN=k8s-harbor.taozi.net" \
    -reqexts SAN \
    -config <(cat /etc/pki/tls/openssl.cnf\
        <(printf "[SAN]\nsubjectAltName=DNS:k8s-harbor.taozi.net")) \
    -out k8s-harbor.taozi.ne.csr 
#用申请文件来申请证书:
openssl x509 -req -days 365000 \
    -in k8s-harbor.taozi.ne.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
    -extfile <(printf "subjectAltName=DNS:k8s-harbor.taozi.net") \
    -out k8s-harbor.taozi.net.crt

cd /apps/harbor/
./install.sh

clipboard

#harbor自启动:

cat > /lib/systemd/system/harbor.service <<EOF
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor
[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker-compose -f  /apps/harbor/docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f /apps/harbor/docker-compose.yml down
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload 
systemctl enable harbor

修改 harbor 配置生效方法:

建议修改配置方法:

systemctl stop harbor
vim harbor.yml
cd /apps/harbor/
vim harbor.yml
. /apps/harbor/prepare
systemctl start harbor

或者

cd /apps/harbor/
docker-compose stop
docker ps  -a
vim harbor.yml
./apps/harbor/prepare
docker-compose  start

或者:

/apps/harbor/install.sh

#登录实验:

docker login k8s-harbor.taozi.net

clipboard

#在master1上安装ansable,免密登录和拷贝hosts文件:

yum install ansible -y
#脚本分发公钥和docker证书
ssh-keygen
yum -y install sshpass
vim scp.sh 
#!/bin/bash
. /etc/init.d/functions
HarborHostname=k8s-harbor.taozi.net
#目标主机列表,只需要所有master和node节点即可,包括本机
IP="
192.168.37.102
192.168.37.103
192.168.37.104
192.168.37.105
192.168.37.106
192.168.37.107
192.168.37.108
192.168.37.109
192.168.37.110
"
scp_key(){
 for node in $IP;do
  sshpass -p lijian ssh-copy-id ${node} -o StrictHostKeyChecking=no &>/dev/null
  if [ 0 -eq 0 ];then
    action "${node}秘钥copy完成"
  else
    action "${node}秘钥copy失败"
  fi
 done
}

scp_hosts(){
 for node in $IP;do
     sshpass ${node}
  if [ 0 -eq 0 ];then
      scp   /etc/hosts ${node}:/etc/hosts
      action "host 文件拷贝完成"
      scp -r  /root/.docker  ${node}:/root/
#  else
#    action "${node} hosts文件copy失败"
  fi
 done
}

scp_srt(){
 for node in $IP;do
    sshpass ${node}
  if [ 0 -eq 0 ];then
      ssh   ${node} "mkdir /etc/docker/certs.d/${HarborHostname} -p"
      action "Harbor 证书目录创建成功!"
      scp /apps/harbor/certs/${HarborHostname}/${HarborHostname}.crt ${node}:/etc/docker/certs.d/${HarborHostname}/harbor-ca.crt
      action "Harbor 证书拷贝成功!"
      #scp -r  /root/.docker  ${node}:/root/
      #action "Harbor 认证文件拷贝完成!"

#  else
#    action "${node} 证书copy失败"
  fi
 done
}

scp_key
scp_hosts
#scp_srt

验证节点成功:

clipboard

2)在部署节点编排k8s安装

可以提前在每个节点上安装需要的工具:

yum install -y conntrack-tools ipvsadm nfs-utils psmisc rsync socat

说明:对比之前版本配置文件,该版本将大部分的变量集成在./example/config.yml文件中,配置部分解释:

MASTER_CERT_HOSTS: - 如果需要外部访问 apiserver,可选在config.yml配置 MASTER_CERT_HOSTS

CA_EXPIRY: "876000h" - 证书的有效期配置

NODE_CIDR_LEN: - node 节点上 pod 网段掩码长度(决定每个节点最多能分配的pod ip地址)

INSTALL_SOURCE: "offline" - 配置使用离线安装系统包(需要ezdown -P 下载离线系统软件)

NODE_CIDR_LEN - ode 节点上 pod 网段掩码长度(决定每个节点最多能分配的pod ip地址)

时间可能较长,一些镜像需要去官网下载,本次拉去运行./ezdown -D花费将近3个小时;可以在正式部署之前选用离线模式先把各种镜像拉取下来./ezdown -P

# 下载工具脚本ezdown,举例使用kubeasz版本3.0.0
export release=3.2.0
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
chmod +x ./ezdown
# 使用工具脚本下载
./ezdown -D

cp和修改hosts文件:

cd /etc/kubeasz
cp /etc/kubeasz/example/hosts.multi-node hosts
grep ^[^#] hosts 
[etcd]
192.168.37.102
192.168.37.103
[kube_master]
192.168.37.102
192.168.37.103
[kube_node]
192.168.37.108
192.168.37.109
[harbor]
[ex_lb]
192.168.37.106 LB_ROLE=master EX_APISERVER_VIP=192.168.37.220 EX_APISERVER_PORT=6443
192.168.37.107 LB_ROLE=backup EX_APISERVER_VIP=192.168.37.220 EX_APISERVER_PORT=6443
[chrony]
[all:vars]
SECURE_PORT="6443"
CONTAINER_RUNTIME="docker"
CLUSTER_NETWORK="flannel"
PROXY_MODE="ipvs"
SERVICE_CIDR="172.20.0.0/16"
CLUSTER_CIDR="10.10.0.0/16"
NODE_PORT_RANGE="30000-60000"
CLUSTER_DNS_DOMAIN="taizo.local"
bin_dir="/usr/bin"
base_dir="/etc/kubeasz"
cluster_dir="{{ base_dir }}/clusters/_cluster_name_"
ca_dir="/etc/kubernetes/ssl"

clipboard

hosts文件解释:

[etcd]
192.168.3.147 NODE_NAME=etcd1   #etcd集群中,每个节点需要有一个独一无二的名称,不能重复

[kube-master]
192.168.3.141       #master节点

[kube-node]         #node节点
192.168.3.144

[ex-lb]      #主要指定apiserver的使用的高可用的VIP;
192.168.3.221 LB_ROLE=master EX_APISERVER_VIP=192.168.3.188 EX_APISERVER_PORT=6443
192.168.3.222 LB_ROLE=backup EX_APISERVER_VIP=192.168.3.188 EX_APISERVER_PORT=6443
CONTAINER_RUNTIME="docker"     #指定使用的容器运行时

# Secure port for apiservers
SECURE_PORT="6443"               #指定在master上运行的apiserver的端口

CLUSTER_NETWORK="flannel"   #指定网络插件

PROXY_MODE="ipvs"           #指定service类型使用ipvs

SERVICE_CIDR="172.31.0.0/16"   #指定service网段

CLUSTER_CIDR="10.10.0.0/16"    #pod网段

NODE_PORT_RANGE="30000-60000"  #nodeport端口范围

CLUSTER_DNS_DOMAIN="taizo.local."  #service的域名后缀,凡是后期创建所有service的后缀都是这个,

bin_dir="/usr/bin"  #指定二进制程序路径,把安装的二进制程序存放到各个节点的/usr/bin/下,后期当进入master或者node上可直接执行这些程序

ca_dir="/etc/kubernetes/ssl"  #证书路径

base_dir="/etc/ansible"       #kubeasz的工作路径

准备开始执行playbook,修改playbooks/01.prepare.yml,因为前期已经同步了时间和部署了负载均衡,所以将这两条注释了

vim playbooks/01.prepare.yml

clipboard

证书的申请信息放这里面,CA_EXPIRY变量是证书有效期时间:

ll roles/deploy/templates/ca-csr.json.j2
#过滤该变量,变量时间文件
grep CA_EXPIRY . -R

clipboard

内核优化参数文件:roles/prepare/templates/95-k8s-sysctl.conf.j2 需要修改可以提前修改。

开始部署:

执行01,安装证书及初始化:

这里提示了一个错误,显示本机有ca的两个时间变量未定义,但本机为102机器,已全部运行成功,故先暂时不处理。

该版本需使用ezctl进行安装,安装之前先命名集群名称,该名称为k8s-01,安装尽量将所有的错误都解决;

cd /etc/kubeasz
#将改好的hosts和config.yml文件放到/k8s-01中;
./ezctl new k8s-01
cp hosts /etc/kubeasz/clusters/k8s-01/hosts
cp example/config.yml /etc/kubeasz/clusters/k8s-01/config.yml
#01步骤不要轻易执行,会改变证书
./ezctl setup k8s-01 01

clipboard

执行02,安装etcd:

./ezctl setup k8s-01 02

完成后在103上查看etcd进程

clipboard

#官方的检查for循环有问题,应该是旧版本的脚本,没有修改路径,下边是修改后的心跳检查脚本;

export NODE_IPS="192.168.37.102 192.168.37.103 192.168.37.104"
for ip in ${NODE_IPS}; do
  ETCDCTL_API=3 etcdctl \
  --endpoints=https://${ip}:2379  \
  --cacert=/etc/kubernetes/ssl/ca.pem \
  --cert=/etc/kubernetes/ssl/etcd.pem \
  --key=/etc/kubernetes/ssl/etcd-key.pem \
  endpoint health; done

clipboard

报错分析:

"error":"cluster ID mismatch"

之前这个节点上安装了etcd,需要将--data_dir中的所有数据清空即可

rm -rf /var/lib/etcd/

执行03,创建容器运行时:

#roles/docker/templates/daemon.json.j2已配置国内镜像加速,需要的可以修改:

clipboard

前面因为部署得harbor是基于https的,所以牵扯harbor的证书问题,可以两种方法解决:

1)安装docker完成后用上面的分发脚本在harbor上进行分发

将证书放到每个node和需要打镜像的服务器上(可以使用前面的脚本分发):

#在每个node和需要打镜像的服务器创建
mkdir -pv /etc/docker/certs.d/k8s-harbor.taozi.net/ -p
#将证书文件复制到本地:
scp -r k8s-harbor.taozi.net:/apps/harbor/certs/k8s-harbor.taozi.net.crt  /etc/docker/certs.d/k8s-harbor.taozi.net/ca.crt

2)将harbor上的证书拷贝到本机,在官方的playbook上加上拷贝任务,在进行03执行:

cd /etc/kubeasz/roles/docker/files
scp  192.168.37.105:/etc/docker/certs.d/k8s-harbor.taozi.net/ca.crt .
vim /etc/kubeasz/roles/docker/tasks/main.yml
#在/etc/kubeasz/roles/docker/tasks/main.yml文件的最后加上拷贝的任务;
- name: mkdir datadir
  file: path=/etc/docker/certs.d/k8s-harbor.taozi.net/  state=directory

- name: 下载harbor的证书文件
  copy: src=ca.crt dest=/etc/docker/certs.d/k8s-harbor.taozi.net/k8s-harbor.taozi.net mode=0644

./ezctl setup k8s-01 03

在其他节点上验证是否能push镜像:

docker tag easzlab/kubeasz:3.2.0 k8s-harbor.taozi.net/test/easzlab/kubeasz:3.2.0
docker push k8s-harbor.taozi.net/test/easzlab/kubeasz:3.2.0

clipboard

#查看docker的版本

./bin/docker version

clipboard

执行04:,安装master节点:

证书相关信息放在roles/kube-master/templates/kubernetes-csr.json.j2内,如需要修改可以自行修改:

kubernetes apiserver 使用对等证书,创建时hosts字段需要配置:

  • 如果配置 ex_lb,需要把 EX_APISERVER_VIP 也配置进去
  • 如果需要外部访问 apiserver,可选在config.yml配置 MASTER_CERT_HOSTS
  • kubectl get svc 将看到集群中由api-server 创建的默认服务 kubernetes,因此也要把 kubernetes 服务名和各个服务域名也添加进去

./ezctl setup k8s-01 04

clipboard

注意:往master会请求VIP,这里要注意haproxy的配置一定要正确,后端服务器如果专项不对,master会起不来;

kubectl get node

clipboard

执行05:,安装node节点:

注意:在roles/kube-node/templates/kubelet.service.j2里面有个基础容器

  • --pod-infra-container-image 指定基础容器(负责创建Pod 内部共享的网络、文件系统等)镜像,K8S每一个运行的 POD里面必然包含这个基础容器,如果它没有运起来那么你的POD 肯定创建不了,kubelet日志里面会看到类似 FailedCreatePodSandBox 错误,可用docker images 查看节点是否已经下载到该镜像

这个选项是一个变量SANDBOX_IMAGE,查询这个变量,在/clusters/k8s-01/config.yml找到:

clipboard

注意:这一步需要修改两个的值:

在运行脚本下载的时候,使用的是ezdown这个,里面存在一些下划线的变量值,下载时ezdown和ezctl会相互调用,ezctl脚本内把类似于”__flannel__“的镜像版本变量值全部替换具体的值,如下图,

clipboard

但是在进行到步骤05和06的时候,并没有调用把这些变量替换,造成k8s在run的时候全部是镜像无法拉下来,如下图:

clipboard

需要修改easzlab/pause版本(对应变量SANDBOX_IMAGE)和easzlab/flannel版本(对应变量flannelVer)镜像版本的值;

先docker images查询已经下载的这两个镜像的的版本:

clipboard

进行修改:

vim clusters/k8s-01/config.yml

clipboard

clipboard

grep easzlab/flannel . -R
vim clusters/_cluster_name_/yml/flannel.yaml

clipboard

在每个节点查询有无easzlab/pause镜像:

docker images

clipboard

./ezctl setup k8s-01 05 kubectl get node

clipboard

执行06,安装网络组件:(只能选一种组件)

使用flannel支持网络需要修改变量flannelver的值,这里修改为:flannelVer: "v0.15.1"

clipboard

使用calico支持网络需要修改变量calico_ver的值,这里修改为:calico_ver: "v3.15.5"

clipboard

./ezctl setup k8s-01 06

完成后等待容器都running

clipboard

查看kubelet状态

journalctl -f -u kubelet

查命令:

查命令:
kubectl describe pod  net-test1 --namespace=default
kubectl describe pod kube-flannel-ds-8zdb8 --namespace=kube-system
kubectl get svc
kubectl get endpoints kubernetes --namespace=default  -o yaml
删除pod:
kubectl delete pod kube-flannel-ds-jqcqk --namespace=kube-system
检查日志:
kubectl logs --namespace=kube-system kube-flannel-ds-5d7jf
kubectl get events
查看kube-controller-manager启动状态
systemctl status kube-controller-manager -l

启动后需要验证网络通不通

1. 启动deploy

kubectl create deployment deployment-nginx --image=k8s-harbor.taozi.net/test/nginx:1.14-alpine

clipboard

2. scale 3个

kubectl scale --replicas=3 deployments.apps/deployment-nginx

clipboard

3. 查看位于不同节点的pod 能否基于端口通信

查看3个pod的地址,条算任意一个进去

clipboard

kubectl exec -it deployment-nginx-7fd9bb74cc-9f68b -- sh

验证内网:

clipboard

验证外网:

clipboard

增加和删除节点:

新增kube_node节点大致流程为:(参考ezctl 里面add-node函数 和 playbooks/22.addnode.yml)

ezctl add-node k8s-01 192.168.37.110        # 假设待增加节点为 192.168.37.110,如需要重新加该节点,请删除hosts文件的该节点IP
ezctl del-node k8s-01 192.168.37.110             # 假设待删除节点为 192.168.37.110

配置 ssh 免密码登录新增节点,然后执行 (假设待增加节点为 192.168.1.11, 集群名称test-k8s):

$ ezctl add-master test-k8s 192.168.1.11 $ ezctl del-master test-k8s 192.168.1.11 # 假设待删除节点 192.168.1.11

版本升级:

先备份目前的二进制文件:

master:kube-apiserver kubectl kube-proxy kube-controller-manager kubelet kube-scheduler

node:kubectl kubelet kube-proxy

执行07,安装k8s的组件

安装DNS和dashboard:

/ # cat /etc/resolv.conf 
nameserver 169.254.20.10
search default.svc.taizo.local svc.taizo.local taizo.local taozi.net
options ndots:5

生产环境的推荐DNS的容器配置:2和4G

修改vim clusters/k8s-01/config.yml中的几个变量:

vim clusters/k8s-01/config.yml
dashboard_install: "yes"
dns_install: "yes"
corednsVer: "1.8.6"
dnsNodeCacheVer: "1.21.1"
LOCAL_DNS_CACHE: "169.254.20.10"
metricsVer: "v0.5.2"
dashboardVer: "v2.4.0"
dashboardMetricsScraperVer: "v1.0.7"

相当于修改这里的yml文件(不建议这样修改,ansible已执行,就会重新生成yaml文件,所以还是该上面的变量)

image: easzlab/k8s-dns-node-cache:__dns_node_cache__ clusters/_cluster_name_/yml/nodelocaldns.yaml

image: easzlab/metrics-server:__metrics__ clusters/_cluster_name_/yml/metrics-server.yaml

image: coredns/coredns:__coredns__ clusters/_cluster_name_/yml/coredns.yaml

image: kubernetesui/dashboard:__dashboard__ clusters/_cluster_name_/yml/dashboard/kubernetes-dashboard.yaml

image: kubernetesui/metrics-scraper:__dash_metrics__ clusters/_cluster_name_/yml/dashboard/kubernetes-dashboard.yaml

#如果是生产环境的话,将下面一行修改成,forward修改为公司内部的dns服务器

vim roles/cluster-addon/templates/dns/nodelocaldns-ipvs.yaml.j2 #forward . __PILLAR__UPSTREAM__SERVERS__ forward . 223.6.6.6

clipboard

参考资料-在 Kubernetes 集群中使用 NodeLocal DNSCache:https://kubernetes.io/zh/docs/tasks/administer-cluster/nodelocaldns/

执行ansible:

ezctl setup k8s-01 07

测试DNS:

kubectl exec  -it   deployment-nginx-7fd9bb74cc-9f68b -- sh
ping kube-dns-upstream.kube-system.svc.taozi.local
ping kube-dns.kube-system.svc.taozi.localping www.jd.com -c1

clipboard

安装dashboard先查询兼容情况:https://github.com/kubernetes/dashboard/releases

dashboard的最新版本是v2.4.0只兼容到k8s:1.21,现在使用的k8s:1.23,应该是兼容性的问题,造成无法进入dashboard:

clipboard

03313b1441da10e832e5d914260679d

clipboard

查看dashboard的打开的端口

kubectl get svc -A

clipboard

网页进行登录:

查看令牌:

kubectl get secret -A | grep admin

clipboard

kubectl describe secret -n kube-system admin-user-token-r9qtc

clipboard

posted @ 2022-01-14 17:34  一束狗尾草  阅读(817)  评论(0编辑  收藏  举报