tshxawen

kubernetes第五次课

1. 总结 Underlay 和 Overlay 网络的的区别及优缺点
1.1 Overlay 网络
1.1.1 Overlay网络简介
      Overlay叫叠加网络也叫覆盖网络,指的是在物理网络的基础之上叠加实现新的虚拟网络,即可使网络的中的容器可以相互通信。
      优点是对物理网络的兼容性比较好,可以实现pod的夸宿主机子网通信。
      calico与flannel等网络插件都支持overlay网络。
      缺点是有额外的封装与解封性能开销。
      目前私有云使用比较多。
1.1.2 overlay设备简介
      VTEP(VXLAN Tunnel Endpoint vxlan隧道端点),VTEP是VXLAN网络的边缘设备,是VXLAN隧道的起点和终点,VXLAN对用户原始数据帧的封装和解封装均在VTEP上进行,用于VXLAN报文的封装和解封装,VTEP与物理网络相连,VXLAN报文中源IP地址为本节点的VTEP地址,VXLAN报文中目的IP地址为对端节点的VTEP地址,一对VTEP地址就对应着一个VXLAN隧道,服务器上的虚拟交换机(隧道flannel.1就是VTEP),比如一个虚拟机网络中的多个vxlan就需要多个VTEP对不同网络的报文进行封装与解封装。
      VNI(VXLAN Network Identifier):VXLAN网络标识VNI类似VLAN ID,用于区分VXLAN段,不同VXLAN段的虚拟机不能直接二层相互通信,一个VNI表示一个租户,即使多个终端用户属于同一个VNI,也表示一个租户。
     NVGRE:Network Virtualization using Generic Routing Encapsulation,主要支持者是Microsoft,与VXLAN不同的是,NVGRE没有采用标准传输协议(TCP/UDP),而是借助通用路由封装协议(GRE),NVGRE使用GRE头部的第24位作为租户网络标识符(TNI), 与VXLAN一样可以支持1777216个vlan。
1.1.3 overlay通信简介
     VM A发送L2 帧与VM请求与VM B通信。
     源宿主机VTEP添加或者封装VXLAN、UDP及IP头部报文。   
     网络层设备将封装后的报文通过标准的报文在三层网络进行转发到目标主机。
     目标宿主机VTEP删除或者解封装VXLAN、UDP及IP头部。
     将原始L2帧发送给目标VM。
1.2 Underlay 网络
    Underlay网络就是传统IT基础设施网络,由交换机和路由器等设备组成,借助以太网协议、路由协议和VLAN协议等驱动,它还是Overlay网络的底层网络,为Overlay网络提供数据通信服务。容器网络中的Underlay网络是指借助驱动程序将宿主机的底层网络接口直接暴露给容器使用的一种网络构建技术,较为常见的解决方案有MAC VLAN、IP VLAN和直接路由等。
   Underlay依赖于物理网络进行跨主机通信。
 
 
kubeadm安装k8s  实现underlay网络
root@k8S-master:~# apt update
root@k8S-master:~# apt -y install apt-transport-https ca-certificates curl software-properties-common

安装GPG证书
root@k8S-master:~# curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
OK

root@k8S-master:~# sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
root@k8S-master:~# apt-get -y update

查看可安装的Docker版本
root@k8S-master:~# apt-cache madison docker-ce docker-ce-cli
root@k8S-master:~# apt install -y docker-ce=5:20.10.23~3-0~ubuntu-jammy docker-ce-cli=5:20.10.23~3-0~ubuntu-jammy

镜像加速
root@k8S-master:/etc/docker# cat daemon.json
{
          "registry-mirrors": ["https://ydwu9nbq.mirror.aliyuncs.com"]
}
root@k8S-master:/etc/docker# systemctl restart docker
root@k8S-master:/etc/docker# sudo systemctl daemon-reload
root@k8S-master:/etc/docker# systemctl restart docker

安装cri-dockerd-二进制:

root@k8S-master:~# wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1.amd64.tgz
root@k8S-master:~# tar xvf cri-dockerd-0.3.1.amd64.tgz
cri-dockerd/
cri-dockerd/cri-dockerd
root@k8S-master:~# cp cri-dockerd/cri-dockerd /usr/local/bin/

配置cri-dockerd.service文件:
安装cri-dockerd-编写cri-docker.service:

配置cri-dockerd.service文件:

安装cri-dockerd-编写cri-docker.socket:
配置cri-docker.socket文件:



root@k8S-master:~# vim /lib/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target

root@k8S-master:~# vim /etc/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target

systemctl daemon-reload && systemctl restart cri-docker && systemctl enable cri-docker && systemctl enable --now cri-docker.socket

安装kubeadm
root@k8S-master:~# apt-get update && apt-get install -y apt-transport-https
root@k8S-master:~# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
root@k8S-master:~# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

root@k8S-master:~# apt update

查看可kubeadm安装的版本
root@k8S-master:~# apt-cache madison kubeadm
root@k8S-master:~# apt-get install kubelet=1.24.10-00 kubeadm=1.24.10-00 kubectl=1.24.10-00
root@k8S-master:~# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.10", GitCommit:"5c1d2d4295f9b4eb12bfbf6429fdf989f2ca8a02", GitTreeState:"clean", BuildDate:"2023-01-18T19:13:52Z", GoVersion:"go1.19.5", Compiler:"gc", Platform:"linux/amd64"}

root@k8S-master:~# kubeadm config images list --kubernetes-version v1.24.10
registry.k8s.io/kube-apiserver:v1.24.10
registry.k8s.io/kube-controller-manager:v1.24.10
registry.k8s.io/kube-scheduler:v1.24.10
registry.k8s.io/kube-proxy:v1.24.10
registry.k8s.io/pause:3.7
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.8.6

root@k8S-master:~# vim images-download.sh
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.24.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.24.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.24.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.24.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.6-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6

root@k8S-master:~# kubeadm init --apiserver-advertise-address=10.4.7.136 \
--apiserver-bind-port=6443 \
--kubernetes-version=v1.24.10 \
--pod-network-cidr=10.200.0.0/16 \
--service-cidr=10.4.5.0/24 \
--service-dns-domain=cluster.local \
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
--ignore-preflight-errors=swap \


Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.4.7.136:6443 --token ndy56z.xpqrcqqlndywsg3g \
        --discovery-token-ca-cert-hash sha256:7e345047689b53d3516e896b6b75f5b08a3d8cd134e66f7b98bc269bfa74b0ab

root@k8S-master:~# mkdir -p $HOME/.kube
root@k8S-master:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config
root@k8S-master:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config

root@k8S-node01:~# kubeadm join 10.4.7.136:6443 --token ndy56z.xpqrcqqlndywsg3g --discovery-token-ca-cert-hash sha256:7e345047689b53d3516e896b6b75f5b08a3d8cd134e66f7b98bc269bfa74b0ab  --cri-socket unix:///var/run/cri-dockerd.sock

root@k8S-master:~# scp /root/.kube/config 10.4.7.137:/root/.kube/
root@k8S-master:~# scp /root/.kube/config 10.4.7.138:/root/.kube/                                                                                  
root@k8S-master:~# scp /root/.kube/config 10.4.7.139:/root/.kube/


root@k8S-master:~# kubectl get node
NAME                  STATUS     ROLES           AGE     VERSION
k8s-master.awen.com   NotReady   control-plane   7m42s   v1.24.10
k8s-node01.awen.com   NotReady   <none>          5m29s   v1.24.10
k8s-node02.awen.com   NotReady   <none>          3m4s    v1.24.10
k8s-node03.awen.com   NotReady   <none>          2m38s   v1.24.10

root@k8S-node01:~# kubectl get node
NAME                  STATUS     ROLES           AGE     VERSION
k8s-master.awen.com   NotReady   control-plane   7m44s   v1.24.10
k8s-node01.awen.com   NotReady   <none>          5m31s   v1.24.10
k8s-node02.awen.com   NotReady   <none>          3m6s    v1.24.10
k8s-node03.awen.com   NotReady   <none>          2m40s   v1.24.10

root@k8S-node02:~# kubectl get node
NAME                  STATUS     ROLES           AGE     VERSION
k8s-master.awen.com   NotReady   control-plane   7m47s   v1.24.10
k8s-node01.awen.com   NotReady   <none>          5m34s   v1.24.10
k8s-node02.awen.com   NotReady   <none>          3m9s    v1.24.10
k8s-node03.awen.com   NotReady   <none>          2m43s   v1.24.10

root@k8s-node03:~# kubectl get node
NAME                  STATUS     ROLES           AGE     VERSION
k8s-master.awen.com   NotReady   control-plane   7m50s   v1.24.10
k8s-node01.awen.com   NotReady   <none>          5m37s   v1.24.10
k8s-node02.awen.com   NotReady   <none>          3m12s   v1.24.10
k8s-node03.awen.com   NotReady   <none>          2m46s   v1.24.10


安装helm

下载二进制安装包
root@k8S-master:~# wget https://get.helm.sh/helm-v3.9.0-linux-amd64.tar.gz
root@k8S-master:~# tar xvf helm-v3.9.0-linux-amd64.tar.gz
linux-amd64/
linux-amd64/helm
linux-amd64/LICENSE
linux-amd64/README.md
root@k8S-master:~# mv linux-amd64/helm /usr/local/bin/

部署网络组件hybridnet
root@k8S-master:~# helm repo add hybridnet https://alibaba.github.io/hybridnet/
"hybridnet" has been added to your repositories
root@k8S-master:~# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "hybridnet" chart repository
Update Complete. ⎈Happy Helming!⎈

root@k8S-master:~# helm install hybridnet hybridnet/hybridnet -n kube-system --set init.cidr=10.200.0.0/16(pod地址) pod地址为overlay
root@k8S-master:~# helm install hybridnet hybridnet/hybridnet -n kube-system --set init.cidr=10.200.0.0/16
W0303 21:47:26.933166   22578 warnings.go:70] spec.template.spec.nodeSelector[beta.kubernetes.io/os]: deprecated since v1.14; use "kubernetes.io/os" instead
W0303 21:47:26.933182   22578 warnings.go:70] spec.template.metadata.annotations[scheduler.alpha.kubernetes.io/critical-pod]: non-functional in v1.16+; use the "priorityClassName" field instead
NAME: hybridnet
LAST DEPLOYED: Fri Mar  3 21:47:25 2023
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None

root@k8S-master:~# kubectl get pods -A
NAMESPACE     NAME                                                             READY           STATUS              RESTARTS   AGE
kube-system   calico-typha-6f55876f98-grfch                                0/1          ContainerCreating             0          42s
kube-system   calico-typha-6f55876f98-mvzhm                            0/1          ContainerCreating             0          42s
kube-system   calico-typha-6f55876f98-vs925                              0/1          ContainerCreating             0          42s
kube-system   coredns-7f74c56694-8kxqx                                    0/1           Pending                            0          32m
kube-system   coredns-7f74c56694-9x5kd                                    0/1           Pending                            0          32m
kube-system   etcd-k8s-master.awen.com                                     1/1           Running                           0          32m
kube-system   hybridnet-daemon-4gm6v                                       0/2            Init:0/1                             0          42s
kube-system   hybridnet-daemon-6lvqh                                         0/2            Init:0/1                             0          43s
kube-system   hybridnet-daemon-7z8lr                                         0/2            lnit:0/1                              0          43s
kube-system   hybridnet-daemon-jt4rr                                           0/2           Init:0/1                               0          43s
kube-system   hybridnet-manager-6574dcc5fb-fwc2d                   0/1          Pending                             0          42s
kube-system   hybridnet-manager-6574dcc5fb-g2b9g                   0/1          Pending                            0          42s
kube-system   hybridnet-manager-6574dcc5fb-tsrm8                   0/1           Pending                            0          42s
kube-system   hybridnet-webhook-76dc57b4bf-r9nlw                   0/1           Pending                            0          43s
kube-system   hybridnet-webhook-76dc57b4bf-zdfw7                   0/1          Pending                             0          43s
kube-system   hybridnet-webhook-76dc57b4bf-zsqfr                    0/1           Pending                            0          43s
kube-system   kube-apiserver-k8s-master.awen.com                   1/1           Running                             0          32m
kube-system   kube-controller-manager-k8s-master.awen.com   1/1            Running                             0          32m
kube-system   kube-proxy-42bfd                                                  1/1            Running                              0          30m
kube-system   kube-proxy-mcsw4                                                1/1            Running                              0          27m
kube-system   kube-proxy-tkd6r                                                   1/1            Running                              0          28m
kube-system   kube-proxy-z9j66                                                  1/1            Running                              0          32m
kube-system   kube-scheduler-k8s-master.awen.com                 1/1            Running                              0          32m
root@k8S-master:~# kubectl describe pod hybridnet-manager-6574dcc5fb-fwc2d -n kube-system
Warning  FailedScheduling  80s   default-scheduler  0/4 nodes are available: 4 node(s) didn't match Pod's node affinity/selector. preemption: 0/4 nodes are available: 4 Preemption is not helpful for scheduling.

root@k8S-master:~# kubectl label node k8s-node02.awen.com  node-role.kubernetes.io/master=
root@k8S-master:~# kubectl label node k8s-node03.awen.com  node-role.kubernetes.io/master=
root@k8S-master:~# kubectl label node k8s-node01.awen.com  node-role.kubernetes.io/master=

root@k8S-master:~# kubectl get pods -A
NAMESPACE     NAME                                                            READY   STATUS    RESTARTS        AGE
kube-system   calico-typha-6f55876f98-5m7lb                              1/1     Running   0               57m
kube-system   calico-typha-6f55876f98-7m9fl                               1/1     Running   0               57m
kube-system   calico-typha-6f55876f98-rpd2n                               1/1     Running   0               57m
kube-system   coredns-7f74c56694-9x5kd                                    1/1     Running   0               112m
kube-system   coredns-7f74c56694-v8znb                                     1/1     Running   0               59m
kube-system   etcd-k8s-master.awen.com                                      1/1     Running   0               112m
kube-system   hybridnet-daemon-b7cs8                                          2/2     Running   1 (55m ago)     57m
kube-system   hybridnet-daemon-nt2r7                                            2/2     Running   1 (54m ago)     57m
kube-system   hybridnet-daemon-wt7lh                                            2/2     Running   0               65s
kube-system   hybridnet-daemon-zrk88                                           2/2     Running   0               57m
kube-system   hybridnet-manager-6574dcc5fb-57dvg                     1/1     Running   0               57m
kube-system   hybridnet-manager-6574dcc5fb-8bmhd                    1/1     Running   2 (60s ago)     2m56s
kube-system   hybridnet-manager-6574dcc5fb-dmrpp                     1/1     Running   0               57m
kube-system   hybridnet-webhook-76dc57b4bf-45dzh                      1/1     Running   2 (60s ago)     5m13s
kube-system   hybridnet-webhook-76dc57b4bf-b6zr9                       1/1     Running   0               57m
kube-system   hybridnet-webhook-76dc57b4bf-ds8vf                       1/1     Running   0               57m
kube-system   kube-apiserver-k8s-master.awen.com                       1/1     Running   0               112m
kube-system   kube-controller-manager-k8s-master.awen.com        1/1     Running   0               112m
kube-system   kube-proxy-42bfd                                                        1/1     Running   0               110m
kube-system   kube-proxy-mcsw4                                                      1/1     Running   1 (2m16s ago)   107m
kube-system   kube-proxy-tkd6r                                                          1/1     Running   0               107m
kube-system   kube-proxy-z9j66                                                         1/1     Running   0               112m
kube-system   kube-scheduler-k8s-master.awen.com            1/1     Running   0               112m


root@k8S-master:~# cat 1.create-underlay-network.yaml
---
apiVersion: networking.alibaba.com/v1
kind: Network
metadata:
  name: underlay-network1
spec:
  netID: 0
  type: Underlay
  nodeSelector:
    network: "underlay-nethost"

---
apiVersion: networking.alibaba.com/v1
kind: Subnet
metadata:
  name: underlay-network1
spec:
  network: underlay-network1
  netID: 0
  range:
    version: "4"
    cidr: "10.4.7.0/24"
    gateway: "10.4.7.254"     # 外部网关地址
    start: "10.4.7.1"
    end: "10.4.7.254"
root@k8S-master:~# kubectl apply -f 1.create-underlay-network.yaml
network.networking.alibaba.com/underlay-network1 created
subnet.networking.alibaba.com/underlay-network1 created

验证网络
root@k8S-master:~# kubectl get network
NAME                NETID           TYPE       MODE   V4TOTAL   V4USED   V4AVAILABLE   LASTALLOCATEDV4SUBNET   V6TOTAL   V6USED   V6AVAILABLE   LASTALLOCATEDV6SUBNET
init                            4       Overlay           65534     2               65532         init                                         0                                   0                0            
underlay-network1   0       Underlay          253        0               253           underlay-network1                  0                                   0                0
 
 
创建pod并使用overlay网络 (不做修改)
目前 默认会使用overlay网络,overlay使用的是vxlan进行报文封装,会生成一个eth0.vxlan4网卡,接收报文为UDP的8472端口
root@k8S-master:~# kubectl create ns myserver
namespace/myserver created
root@k8S-master:~# kubectl apply -f  2.tomcat-app1-overlay.yaml
deployment.apps/myserver-tomcat-app1-deployment-overlay created
service/myserver-tomcat-app1-service-overlay created
root@k8S-master:~# kubectl get pod,svc -o wide -n myserver -o wide
NAME                                                           READY   STATUS    RESTARTS   AGE   IP           NODE                  NOMINATED NODE   READINESS GATES
pod/myserver-tomcat-app1-deployment-overlay-7864dd6bdb-pzh6z   1/1     Running   0          43s   10.200.0.6   k8s-node02.awen.com   <none>           <none>

NAME                                           TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE   SELECTOR
service/myserver-tomcat-app1-service-overlay   NodePort   10.4.5.68    <none>        80:30003/TCP   43s   app=myserver-tomcat-app1-overlay-selector

root@k8S-master:~# kubectl exec -it myserver-tomcat-app1-deployment-overlay-7864dd6bdb-pzh6z bash -n myserver
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[root@myserver-tomcat-app1-deployment-overlay-7864dd6bdb-pzh6z /]# ping www.baidu.com
PING www.a.shifen.com (110.242.68.3) 56(84) bytes of data.
64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=1 ttl=127 time=22.2 ms
64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=2 ttl=127 time=28.1 ms
64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=3 ttl=127 time=22.0 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 22.063/24.135/28.101/2.807 ms
[root@myserver-tomcat-app1-deployment-overlay-7864dd6bdb-pzh6z /]#
root@k8S-master:~# kubectl exec -it myserver-tomcat-app1-deployment-overlay-7864dd6bdb-pzh6z bash -n myserver
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
[root@myserver-tomcat-app1-deployment-overlay-7864dd6bdb-pzh6z /]# ping www.baidu.com
PING www.a.shifen.com (110.242.68.3) 56(84) bytes of data.
64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=1 ttl=127 time=22.2 ms
64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=2 ttl=127 time=28.1 ms
64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=3 ttl=127 time=22.0 ms
^C
--- www.a.shifen.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 22.063/24.135/28.101/2.807 ms
[root@myserver-tomcat-app1-deployment-overlay-7864dd6bdb-pzh6z /]#
 
创建pod并使用underlay网络
root@k8S-master:~# vi 3.tomcat-app1-underlay.yaml
 18       annotations: #使用Underlay或者Overlay网络
 19         networking.alibaba.com/network-type: Underlay  定义网络

root@k8S-master:~# kubectl apply -f 3.tomcat-app1-underlay.yaml
deployment.apps/myserver-tomcat-app1-deployment-underlay created
service/myserver-tomcat-app1-service-underlay created

root@k8S-master:~# kubectl get pod -n myserver -o wide
NAME                                                        READY   STATUS    RESTARTS   AGE   IP           NODE                  NOMINATED NODE   READINESS GATES
myserver-tomcat-app1-deployment-overlay-7864dd6bdb-pzh6z    1/1     Running   0          29m   10.200.0.6   k8s-node02.awen.com   <none>           <none>
myserver-tomcat-app1-deployment-underlay-5f7dd46d56-ktq2k   1/1     Running   0          10s   10.4.7.2     k8s-node02.awen.com   <none>           <none>
有状态应用可以使用underlay网络
通过service IP访问Pod

root@k8S-master:~# kubectl get svc -n myserver
NAME                                    TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
myserver-tomcat-app1-service-overlay    NodePort    10.4.5.68    <none>        80:30003/TCP   48m
myserver-tomcat-app1-service-underlay   ClusterIP   10.4.5.52    <none>        80/TCP         19m

windown系统
管理员运行cmd
C:\WINDOWS\system32>route add 10.4.5.0 MASK 255.255.255.0 -p 10.4.7.138


 使用service请求是因为  使用service可以使用轮询的方式把请求转发给后面的pod

Flannel、calico通信模式

Flannel vxlan架构图:

源pod发起请求,此时报文中源IP为pod的eth0 的ip,源mac 为pod的eth0的mac,目的Pod为目的Pod的IP,目的mac为网关(cni0)的MAC,
数据报文通过veth peer发送给网关cni0,检查目的mac就是发给自己的,cni0进行目标IP检查,如果是同一个网桥的报文就直接转发,不是的话就发送给
flannel.1,宿主机基于UDP封装Vxlan报文,报文到达目的宿主机物理网卡,接开始解封装报文,报文到达目的宿主机flannel.1,flannel.1检查报文的目的IP,发现是去往本机cni0的子网,将请求报文转发至cni0,cni0基于目的IP检查mac地址表,修改目的MAC为目的MAC后将来请求转给pod报文到达目的宿主机cni0

发送:pod eth0->host veth->host cni0->host vxlan(flannel.1)->host eth0

接收:host eth0->host flannel.1-> host cni0 -> host veth0 -> pod eth0

calico
源pod发起请求, 报文到达宿主机与pod对应的网卡,,报文到达源宿主机tun0,报文到达目的宿主机eth0,报文到达目的宿主机eth0,报文到达目的宿主机tunl0,报文到达目的Pod与目的宿主机对应的网卡,报文到达目的Pod

发送:pod eth0->host cali -> host tun0 -> host eth0

接收:host eth0->host tun0 ->host cali -> pod eth0

 
扩展
1. 基于二进制实现高可用的 K8S 集群环境

 

安装harbor
安装docker docker-compose

root@awen:~# hostnamectl set-hostname k8s-harbor.awen.com
root@awen:~# bash
root@k8s-harbor:~#

root@k8s-harbor:~# wget https://github.com/goharbor/harbor/releases/download/v2.6.3/harbor-offline-installer-v2.6.3.tgz

root@k8s-harbor:~# mkdir /apps
root@k8s-harbor:~# mv /root/harbor-offline-installer-v2.6.3.tgz /apps

root@k8s-harbor:/apps# tar zxvf harbor-offline-installer-v2.6.3.tgz
harbor/harbor.v2.6.3.tar.gz
harbor/prepare
harbor/LICENSE
harbor/install.sh
harbor/common.sh
harbor/harbor.yml.tmpl

root@k8s-harbor:/apps# cd harbor
root@k8s-harbor:/apps/harbor# cp harbor.yml.tmpl harbor.yml

root@k8s-harbor:/apps/harbor# vi harbor.yml
hostname: www.awen.com

root@k8s-harbor:/apps/harbor# mkdir certs
root@k8s-harbor:/apps/harbor# cd certs/
⾃签发证书
root@k8s-harbor:/apps/harbor/certs# openssl genrsa -out harbor-ca.key
root@k8s-harbor:/apps/harbor/certs# openssl req -x509 -new -nodes -key harbor-ca.key -subj "/CN=www.awen.com" -days 7120 -out harbor-ca.crt

root@k8s-harbor:/apps/harbor# vi harbor.yml
 17   certificate: /apps/harbor/certs/harbor-ca.crt
 18   private_key: /apps/harbor/certs/harbor-ca.key
挂载一款数据盘
 53 data_volume: /data


root@k8s-harbor:~# fdisk -l
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
root@k8s-harbor:~# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
root@k8s-harbor:~# mkdir  /data/harbor -p

root@k8s-harbor:~# vi /etc/fstab
/dev/sdb /data/harbor xfs defaults 0 0

root@k8s-harbor:~# mount -a
root@k8s-harbor:~# df -TH
Filesystem                        Type   Size  Used Avail Use% Mounted on
tmpfs                             tmpfs  408M  1.6M  407M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4    26G  9.7G   15G  41% /
tmpfs                             tmpfs  2.1G     0  2.1G   0% /dev/shm
tmpfs                             tmpfs  5.3M     0  5.3M   0% /run/lock
/dev/sda2                         ext4   2.1G  135M  1.8G   8% /boot
tmpfs                             tmpfs  408M  4.1k  408M   1% /run/user/0
/dev/sdb                          xfs     11G  109M   11G   2% /data/harbor

root@k8s-harbor:/apps/harbor# vi harbor.yml
data_volume: /data/harbor

安装harbor
root@k8s-harbor:/apps/harbor# ./install.sh --with-trivy --with-chartmuseum

/etc/hosts文件
10.4.7.131 www.awen.com
 
创建证书
生成私钥
openssl genrsa -out awen.com.key 4096
生成证书签名请求
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=awen.com" \
    -key awen.com.key \
    -out awen.com.csr

生成 x509 v3 扩展文件。
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=awen.com
DNS.2=awen
DNS.3=k8s-harbor.awen.com
EOF

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in awen.com.csr \
    -out awen.com.crt

 登录harbor

 登录harbor成功

root@k8s-harbor:/apps/harbor# docker login www.awen.com
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

跨主机上传镜像
root@k8s-ha:~# mkdir -p /etc/docker/certs.d/www.awen.com
root@k8s-harbor:/apps/crest# scp awen.com.crt 10.4.7.132:/etc/docker/certs.d/www.awen.com
root@k8s-ha:~# vi /etc/hosts
10.4.7.131 www.awen.com
root@k8s-ha:~# docker login www.awen.com
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
 
扩展
1. 基于二进制实现高可用的 K8S 集群环境


安装harbor
安装docker docker-compose

root@awen:~# hostnamectl set-hostname k8s-harbor.awen.com
root@awen:~# bash
root@k8s-harbor:~#

root@k8s-harbor:~# wget https://github.com/goharbor/harbor/releases/download/v2.6.3/harbor-offline-installer-v2.6.3.tgz

root@k8s-harbor:~# mkdir /apps
root@k8s-harbor:~# mv /root/harbor-offline-installer-v2.6.3.tgz /apps

root@k8s-harbor:/apps# tar zxvf harbor-offline-installer-v2.6.3.tgz
harbor/harbor.v2.6.3.tar.gz
harbor/prepare
harbor/LICENSE
harbor/install.sh
harbor/common.sh
harbor/harbor.yml.tmpl

root@k8s-harbor:/apps# cd harbor
root@k8s-harbor:/apps/harbor# cp harbor.yml.tmpl harbor.yml

root@k8s-harbor:/apps/harbor# vi harbor.yml
  5 hostname: www.awen.com
  6
  7 # http related config
  8 http:
  9   # port for http, default is 80. If https enabled, this port will redirect to https port
 10   port: 80
 11
 12 # https related config
 13 https:
 14   # https port for harbor, default is 443
 15   port: 443
 16   # The path of cert and key files for nginx
 17   certificate: /apps/crest/awen.com.crt
 18   private_key: /apps/crest/awen.com.key
挂载一款数据盘
 47 data_volume: /data

root@k8s-harbor:~# fdisk -l
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
root@k8s-harbor:~# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=0 inobtcount=0
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
root@k8s-harbor:~# mkdir  /data/harbor -p

root@k8s-harbor:~# vi /etc/fstab
/dev/sdb /data/harbor xfs defaults 0 0

root@k8s-harbor:~# mount -a
root@k8s-harbor:~# df -TH
Filesystem                        Type   Size  Used Avail Use% Mounted on
tmpfs                             tmpfs  408M  1.6M  407M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4    26G  9.7G   15G  41% /
tmpfs                             tmpfs  2.1G     0  2.1G   0% /dev/shm
tmpfs                             tmpfs  5.3M     0  5.3M   0% /run/lock
/dev/sda2                         ext4   2.1G  135M  1.8G   8% /boot
tmpfs                             tmpfs  408M  4.1k  408M   1% /run/user/0
/dev/sdb                          xfs     11G  109M   11G   2% /data/harbor

root@k8s-harbor:/apps/harbor# vi harbor.yml
data_volume: /data/harbor

安装harbor
root@k8s-harbor:/apps/harbor# ./install.sh --with-trivy --with-chartmuseum

/etc/hosts文件
10.4.7.131 www.awen.com

创建证书
生成私钥
openssl genrsa -out ca.key 4096
openssl genrsa -out awen.com.key 4096
生成证书签名请求
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=awen.com" \
    -key awen.com.key \
    -out awen.com.csr

生成 x509 v3 扩展文件。
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=awen.com
DNS.2=awen
DNS.3=k8s-harbor.awen.com
EOF

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in awen.com.csr \
    -out awen.com.crt
 
完整创建证书
生成 CA 证书私钥
openssl genrsa -out ca.key 4096

生成CA证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=awen.com" \
 -key ca.key \
 -out ca.crt

生成私钥
openssl genrsa -out awen.com.key 4096

生成证书签名请求
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=awen.com" \
    -key awen.com.key \
    -out awen.com.csr

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=www.awen.com
DNS.2=awen
DNS.3=k8s-harbor.awen.com
EOF


openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in awen.com.csr \
    -out awen.com.crt

安装ha服务
root@k8s-ha:~# apt install keepalived haproxy
root@k8s-ha:~# cp /usr/share/doc/keepalived/samples/keepalived.conf.vrrp /etc/keepalived/keepalived.conf
root@k8s-ha:/etc/keepalived# vi keepalived.conf

root@k8s-ha:/etc/keepalived# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    garp_master_delay 10
    smtp_alert
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.4.7.50 label eth0:0
        10.4.7.51 label eth0:1
        10.4.7.52 label eth0:2
        10.4.7.53 label eth0:3
        10.4.7.54 label eth0:4
    }
}

root@k8s-ha:/etc/keepalived# systemctl restart keepalived.service
root@k8s-ha:/etc/keepalived# systemctl enable keepalived.service

root@k8s-ha:/etc/keepalived# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.4.7.132  netmask 255.255.255.0  broadcast 10.4.7.255
        inet6 fe80::20c:29ff:fea8:e812  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a8:e8:12  txqueuelen 1000  (Ethernet)
        RX packets 9083  bytes 7288491 (7.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5445  bytes 635716 (635.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.4.7.50  netmask 255.255.255.255  broadcast 0.0.0.0
        ether 00:0c:29:a8:e8:12  txqueuelen 1000  (Ethernet)

eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.4.7.51  netmask 255.255.255.255  broadcast 0.0.0.0
        ether 00:0c:29:a8:e8:12  txqueuelen 1000  (Ethernet)

eth0:2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.4.7.52  netmask 255.255.255.255  broadcast 0.0.0.0
        ether 00:0c:29:a8:e8:12  txqueuelen 1000  (Ethernet)

eth0:3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.4.7.53  netmask 255.255.255.255  broadcast 0.0.0.0
        ether 00:0c:29:a8:e8:12  txqueuelen 1000  (Ethernet)

eth0:4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.4.7.54  netmask 255.255.255.255  broadcast 0.0.0.0
        ether 00:0c:29:a8:e8:12  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 129  bytes 11508 (11.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 129  bytes 11508 (11.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@k8s-ha:/etc/keepalived# vi /etc/haproxy/haproxy.cfg
listen k8s_api_nodes_6443
    bind 10.4.7.50:6443
    mode tcp
    #balance leastconn
    server 10.4.7.50  10.4.7.50:6443  check inter 2000 fall 3 rise 5
    server 10.4.7.51  10.4.7.51:6443  check inter 2000 fall 3 rise 5
    server 10.4.7.52  10.4.7.52:6443  check inter 2000 fall 3 rise 5

root@k8s-ha:/etc/keepalived# ss -ltn
State             Recv-Q            Send-Q                       Local Address:Port                        Peer Address:Port           Process          
LISTEN            0                 4096                             10.4.7.50:6443                             0.0.0.0:*                                

跨主机上传镜像
root@k8s-ha:~# mkdir -p /etc/docker/certs.d/www.awen.com
root@k8s-harbor:/apps/crest# scp awen.com.crt 10.4.7.132:/etc/docker/certs.d/www.awen.com
root@k8s-ha:~# vi /etc/hosts
10.4.7.131 www.awen.com
root@k8s-ha:~# docker login https://www.awen.com
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded


上传镜像
root@k8s-ha:~# docker pull centos:7.9.2009
7.9.2009: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987
Status: Downloaded newer image for centos:7.9.2009
docker.io/library/centos:7.9.2009
root@k8s-ha:~# docker tag docker.io/library/centos:7.9.2009  www.awen.com/baseimages/centos:7.9.2009
root@k8s-ha:~# docker push www.awen.com/baseimages/centos:7.9.2009
The push refers to repository [www.awen.com/baseimages/centos]
174f56854903: Pushed
7.9.2009: digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f size: 529

安装ansible
root@k8s-ansible:~# apt install python3-pip git -y
root@k8s-ansible:~# pip3 install ansible -i https://mirrors.aliyun.com/pypi/simple/

查看可ansible版本
root@k8s-ansible:~# ansible --version
ansible [core 2.14.3]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.10/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.10.6 (main, Nov 14 2022, 16:10:14) [GCC 11.3.0] (/usr/bin/python3)
  jinja version = 3.0.3
  libyaml = True


安装sshpass命令⽤于同步公钥到各k8s服务器
root@k8s-ansible:~#  apt-get install sshpass -y

10.4.7.131 harbor
10.4.7.132 ha
10.4.7.133 ansible
10.4.7.134 master1
10.4.7.135 master2
10.4.7.136 master3
10.4.7.137 node1
10.4.7.138 node2
10.4.7.139 node3

ansible创建密钥
root@k8s-ansible:~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:Sa/931jGyog61m0kj2c1XgDr+MuerMi/Xbw48P1kFOg root@k8s-ansible.awen.com
The key's randomart image is:
+---[RSA 3072]----+
|                 |
|            . .  |
|        .    + . |
|       . o  o . .|
|        S .o E ..|
|         o+ o.oo.|
|        ...X +oo*|
|       .o.o*X*oX |
|       .++=B@+*.o|
+----[SHA256]-----+
root@k8s-ansible:~#

安装sshpass命令⽤于同步公钥到各k8s服务器
root@k8s-ansible:~# vi scp-key.sh
#!/bin/bash
#目标主机地址
IP="
10.4.7.134
10.4.7.135
10.4.7.136
10.4.7.137
10.4.7.138
10.4.7.139
"
for node in ${IP};do
  sshpass -p 000000 ssh-copy-id -i /root/.ssh/id_rsa.pub  -o StrictHostKeyChecking=no root@${node}
  if [ $? -eq 0 ];then
    echo "${node} 秘钥copy完成"
  else
    echo "${node} 秘钥copy失败"
  fi
done

部署节点点下载部署项⽬及组件:
root@k8s-ansible:~#  export release=3.2.0
root@k8s-ansible:~# wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown
root@k8s-ansible:~# chmod a+x ezdown

root@k8s-ansible:~# vi ezdown
# default settings, can be overridden by cmd line options, see usage
DOCKER_VER=20.10.19   会检查当前主机的docker版本   当前主机有docker使用当前主机的docker  没有就下载配置文件指定版本
KUBEASZ_VER=3.2.0
K8S_BIN_VER=v1.23.1
EXT_BIN_VER=1.0.0
SYS_PKG_VER=0.4.2
HARBOR_VER=v2.1.3
REGISTRY_MIRROR=CN

root@k8s-ansible:~# ./ezdown
root@k8s-ansible:~# ./ezdown
Usage: ezdown [options] [args]
  option: -{DdekSz}
    -C         stop&clean all local containers
    -D         download all into "/etc/kubeasz"
    -P         download system packages for offline installing
    -R         download Registry(harbor) offline installer
    -S         start kubeasz in a container
    -d <ver>   set docker-ce version, default "20.10.19"
    -e <ver>   set kubeasz-ext-bin version, default "1.0.0"
    -k <ver>   set kubeasz-k8s-bin version, default "v1.23.1"
    -m <str>   set docker registry mirrors, default "CN"(used in Mainland,China)
    -p <ver>   set kubeasz-sys-pkg version, default "0.4.2"
    -z <ver>   set kubeasz version, default "3.2.0"


先下载镜像,镜像里面存放二进制,使用容器拉起一个容器,把容器的二进制文件拷到/etc/kubeasz 的某个目录 最后回收容器
root@k8s-ansible:~# ./ezdown -D
2023-03-06 04:46:09 INFO Action successed: download_all

root@k8s-ansible:/etc/kubeasz# ./ezctl new k8s-01
2023-03-06 08:02:11 DEBUG generate custom cluster files in /etc/kubeasz/clusters/k8s-01
2023-03-06 08:02:11 DEBUG set versions
2023-03-06 08:02:11 DEBUG cluster k8s-01: files successfully created.
2023-03-06 08:02:11 INFO next steps 1: to config '/etc/kubeasz/clusters/k8s-01/hosts'
2023-03-06 08:02:11 INFO next steps 2: to config '/etc/kubeasz/clusters/k8s-01/config.yml'

root@k8s-ansible:/etc/kubeasz# cd clusters/
root@k8s-ansible:/etc/kubeasz/clusters# ls
k8s-01
root@k8s-ansible:/etc/kubeasz/clusters# cd k8s-01/
root@k8s-ansible:/etc/kubeasz/clusters/k8s-01# ls
config.yml  hosts

root@k8s-ansible:/etc/kubeasz/clusters/k8s-01# vi hosts
批量修改%s/192.168.1/10.4.7/g
root@k8s-ansible:/etc/kubeasz/clusters/k8s-01# cat hosts
# 'etcd' cluster should have odd member(s) (1,3,5,...)
[etcd]
10.4.7.134
10.4.7.135
10.4.7.136

# master node(s)
[kube_master]
10.4.7.134
10.4.7.135

# work node(s)
[kube_node]
10.4.7.137
10.4.7.138

# [optional] harbor server, a private docker registry
# 'NEW_INSTALL': 'true' to install a harbor server; 'false' to integrate with existed one
[harbor]
#10.4.7.8 NEW_INSTALL=false

# [optional] loadbalance for accessing k8s from outside
[ex_lb]
#10.4.7.6 LB_ROLE=backup EX_APISERVER_VIP=192.168.1.250 EX_APISERVER_PORT=8443
#10.4.7.7 LB_ROLE=master EX_APISERVER_VIP=192.168.1.250 EX_APISERVER_PORT=8443

# [optional] ntp server for the cluster
[chrony]
#10.4.7.1

[all:vars]
# --------- Main Variables ---------------
# Secure port for apiservers
SECURE_PORT="6443"

# Cluster container-runtime supported: docker, containerd
CONTAINER_RUNTIME="docker"

# Network plugins supported: calico, flannel, kube-router, cilium, kube-ovn
CLUSTER_NETWORK="calico"

# Service proxy mode of kube-proxy: 'iptables' or 'ipvs'
PROXY_MODE="ipvs"

# K8S Service CIDR, not overlap with node(host) networking
SERVICE_CIDR="10.100.0.0/16"

# Cluster CIDR (Pod CIDR), not overlap with node(host) networking
CLUSTER_CIDR="10.200.0.0/16"

# NodePort Range
NODE_PORT_RANGE="30000-60000"

# Cluster DNS Domain
CLUSTER_DNS_DOMAIN="awen.local"

# -------- Additional Variables (don't change the default value right now) ---
# Binaries Directory
bin_dir="/usr/local/bin"

# Deploy Directory (kubeasz workspace)
base_dir="/etc/kubeasz"

# Directory for a specific cluster
cluster_dir="{{ base_dir }}/clusters/k8s-01"

# CA and other components cert/key Directory
ca_dir="/etc/kubernetes/ssl"

root@k8s-ansible:/etc/kubeasz/clusters/k8s-01# cat config.yml
############################
# prepare
############################
# 可选离线安装系统软件包 (offline|online)
INSTALL_SOURCE: "online"

# 可选进行系统安全加固 github.com/dev-sec/ansible-collection-hardening
OS_HARDEN: false

# 设置时间源服务器【重要:集群内机器时间必须同步】
ntp_servers:
  - "ntp1.aliyun.com"
  - "time1.cloud.tencent.com"
  - "0.cn.pool.ntp.org"

# 设置允许内部时间同步的网络段,比如"10.0.0.0/8",默认全部允许
local_network: "0.0.0.0/0"


############################
# role:deploy
############################
# default: ca will expire in 100 years
# default: certs issued by the ca will expire in 50 years
CA_EXPIRY: "876000h"
CERT_EXPIRY: "438000h"

# kubeconfig 配置参数
CLUSTER_NAME: "cluster1"
CONTEXT_NAME: "context-{{ CLUSTER_NAME }}"

# k8s version
K8S_VER: "1.23.1"

############################
# role:etcd
############################
# 设置不同的wal目录,可以避免磁盘io竞争,提高性能
ETCD_DATA_DIR: "/var/lib/etcd"
ETCD_WAL_DIR: ""


############################
# role:runtime [containerd,docker]
############################
# ------------------------------------------- containerd
# [.]启用容器仓库镜像
ENABLE_MIRROR_REGISTRY: true

# [containerd]基础容器镜像
SANDBOX_IMAGE: "easzlab/pause:3.6"

# [containerd]容器持久化存储目录
CONTAINERD_STORAGE_DIR: "/var/lib/containerd"

# ------------------------------------------- docker
# [docker]容器存储目录
DOCKER_STORAGE_DIR: "/var/lib/docker"

# [docker]开启Restful API
ENABLE_REMOTE_API: false

# [docker]信任的HTTP仓库
INSECURE_REG: '["127.0.0.1/8" "www.awen.com" "10.4.7.131"]'


############################
# role:kube-master
############################
# k8s 集群 master 节点证书配置,可以添加多个ip和域名(比如增加公网ip和域名)
MASTER_CERT_HOSTS:
  - "10.4.7.50"
  - "api.awen.com"
  #- "www.test.com"

# node 节点上 pod 网段掩码长度(决定每个节点最多能分配的pod ip地址)
# 如果flannel 使用 --kube-subnet-mgr 参数,那么它将读取该设置为每个节点分配pod网段
# https://github.com/coreos/flannel/issues/847
NODE_CIDR_LEN: 24


############################
# role:kube-node
############################
# Kubelet 根目录
KUBELET_ROOT_DIR: "/var/lib/kubelet"

# node节点最大pod 数
MAX_PODS: 200

# 配置为kube组件(kubelet,kube-proxy,dockerd等)预留的资源量
# 数值设置详见templates/kubelet-config.yaml.j2
KUBE_RESERVED_ENABLED: "no"

# k8s 官方不建议草率开启 system-reserved, 除非你基于长期监控,了解系统的资源占用状况;
# 并且随着系统运行时间,需要适当增加资源预留,数值设置详见templates/kubelet-config.yaml.j2
# 系统预留设置基于 4c/8g 虚机,最小化安装系统服务,如果使用高性能物理机可以适当增加预留
# 另外,集群安装时候apiserver等资源占用会短时较大,建议至少预留1g内存
SYS_RESERVED_ENABLED: "no"

# haproxy balance mode
BALANCE_ALG: "roundrobin"


############################
# role:network [flannel,calico,cilium,kube-ovn,kube-router]
############################
# ------------------------------------------- flannel
# [flannel]设置flannel 后端"host-gw","vxlan"等
FLANNEL_BACKEND: "vxlan"
DIRECT_ROUTING: false

# [flannel] flanneld_image: "quay.io/coreos/flannel:v0.10.0-amd64"
flannelVer: "v0.15.1"
flanneld_image: "easzlab/flannel:{{ flannelVer }}"

# [flannel]离线镜像tar包
flannel_offline: "flannel_{{ flannelVer }}.tar"

# ------------------------------------------- calico
# [calico]设置 CALICO_IPV4POOL_IPIP=“off”,可以提高网络性能,条件限制详见 docs/setup/calico.md
CALICO_IPV4POOL_IPIP: "Always"

# [calico]设置 calico-node使用的host IP,bgp邻居通过该地址建立,可手工指定也可以自动发现
IP_AUTODETECTION_METHOD: "can-reach={{ groups['kube_master'][0] }}"

# [calico]设置calico 网络 backend: brid, vxlan, none
CALICO_NETWORKING_BACKEND: "brid"

# [calico]更新支持calico 版本: [v3.3.x] [v3.4.x] [v3.8.x] [v3.15.x]
calico_ver: "v3.19.3"

# [calico]calico 主版本
calico_ver_main: "{{ calico_ver.split('.')[0] }}.{{ calico_ver.split('.')[1] }}"

# [calico]离线镜像tar包
calico_offline: "calico_{{ calico_ver }}.tar"

# ------------------------------------------- cilium
# [cilium]CILIUM_ETCD_OPERATOR 创建的 etcd 集群节点数 1,3,5,7...
ETCD_CLUSTER_SIZE: 1

# [cilium]镜像版本
cilium_ver: "v1.4.1"

# [cilium]离线镜像tar包
cilium_offline: "cilium_{{ cilium_ver }}.tar"

# ------------------------------------------- kube-ovn
# [kube-ovn]选择 OVN DB and OVN Control Plane 节点,默认为第一个master节点
OVN_DB_NODE: "{{ groups['kube_master'][0] }}"

# [kube-ovn]离线镜像tar包
kube_ovn_ver: "v1.5.3"
kube_ovn_offline: "kube_ovn_{{ kube_ovn_ver }}.tar"

# ------------------------------------------- kube-router
# [kube-router]公有云上存在限制,一般需要始终开启 ipinip;自有环境可以设置为 "subnet"
OVERLAY_TYPE: "full"

# [kube-router]NetworkPolicy 支持开关
FIREWALL_ENABLE: "true"

# [kube-router]kube-router 镜像版本
kube_router_ver: "v0.3.1"
busybox_ver: "1.28.4"

# [kube-router]kube-router 离线镜像tar包
kuberouter_offline: "kube-router_{{ kube_router_ver }}.tar"
busybox_offline: "busybox_{{ busybox_ver }}.tar"


############################
# role:cluster-addon
############################
# coredns 自动安装
dns_install: "no"
corednsVer: "1.8.6"
ENABLE_LOCAL_DNS_CACHE: false
dnsNodeCacheVer: "1.21.1"
# 设置 local dns cache 地址
LOCAL_DNS_CACHE: "169.254.20.10"

# metric server 自动安装
metricsserver_install: "no"
metricsVer: "v0.5.2"

# dashboard 自动安装
dashboard_install: "no"
dashboardVer: "v2.4.0"
dashboardMetricsScraperVer: "v1.0.7"

# ingress 自动安装
ingress_install: "no"
ingress_backend: "traefik"
traefik_chart_ver: "10.3.0"

# prometheus 自动安装
prom_install: "no"
prom_namespace: "monitor"
prom_chart_ver: "12.10.6"

# nfs-provisioner 自动安装
nfs_provisioner_install: "no"
nfs_provisioner_namespace: "kube-system"
nfs_provisioner_ver: "v4.0.2"
nfs_storage_class: "managed-nfs-storage"
nfs_server: "192.168.1.10"
nfs_path: "/data/nfs"

############################
# role:harbor
############################
# harbor version,完整版本号
HARBOR_VER: "v2.1.3"
HARBOR_DOMAIN: "harbor.yourdomain.com"
HARBOR_TLS_PORT: 8443

# if set 'false', you need to put certs named harbor.pem and harbor-key.pem in directory 'down'
HARBOR_SELF_SIGNED_CERT: false

# install extra component
HARBOR_WITH_NOTARY: false
HARBOR_WITH_TRIVY: false
HARBOR_WITH_CLAIR: false
HARBOR_WITH_CHARTMUSEUM: true


root@k8s-ansible:/etc/kubeasz# ./ezctl --help
Usage: ezctl COMMAND [args]
-------------------------------------------------------------------------------------
Cluster setups:
    list                             to list all of the managed clusters
    checkout    <cluster>            to switch default kubeconfig of the cluster
    new         <cluster>            to start a new k8s deploy with name 'cluster'
    setup       <cluster>  <step>    to setup a cluster, also supporting a step-by-step way
    start       <cluster>            to start all of the k8s services stopped by 'ezctl stop'
    stop        <cluster>            to stop all of the k8s services temporarily
    upgrade     <cluster>            to upgrade the k8s cluster
    destroy     <cluster>            to destroy the k8s cluster
    backup      <cluster>            to backup the cluster state (etcd snapshot)
    restore     <cluster>            to restore the cluster state from backups
    start-aio                        to quickly setup an all-in-one cluster with 'default' settings

Cluster ops:
    add-etcd    <cluster>  <ip>      to add a etcd-node to the etcd cluster
    add-master  <cluster>  <ip>      to add a master node to the k8s cluster
    add-node    <cluster>  <ip>      to add a work node to the k8s cluster
    del-etcd    <cluster>  <ip>      to delete a etcd-node from the etcd cluster
    del-master  <cluster>  <ip>      to delete a master node from the k8s cluster
    del-node    <cluster>  <ip>      to delete a work node from the k8s cluster

Extra operation:
    kcfg-adm    <cluster>  <args>    to manage client kubeconfig of the k8s cluster

Use "ezctl help <command>" for more information about a given command.

部署k8s集群
环境初始化
root@k8s-ansible:/etc/kubeasz# ./ezctl help setup
Usage: ezctl setup <cluster> <step>
available steps:
    01  prepare            to prepare CA/certs & kubeconfig & other system settings
    02  etcd               to setup the etcd cluster
    03  container-runtime  to setup the container runtime(docker or containerd)
    04  kube-master        to setup the master nodes
    05  kube-node          to setup the worker nodes
    06  network            to setup the network plugin
    07  cluster-addon      to setup other useful plugins
    90  all                to run 01~07 all at once
    10  ex-lb              to install external loadbalance for accessing k8s from outside
    11  harbor             to install a new harbor server or to integrate with an existed one

examples: ./ezctl setup test-k8s 01  (or ./ezctl setup test-k8s prepare)
          ./ezctl setup test-k8s 02  (or ./ezctl setup test-k8s etcd)
          ./ezctl setup test-k8s all
          ./ezctl setup test-k8s 04 -t restart_master

root@k8s-ansible:/etc/kubeasz# ./ezctl setup k8s-01 01

部署etcd cluster
root@k8s-ansible:/etc/kubeasz# ./ezctl setup k8s-01 02
root@k8s-master1:~# export NODE_IPS="10.4.7.134 10.4.7.135 10.4.7.136"
root@k8s-master1:~# for ip in ${NODE_IPS}; do ETCDCTL_API=3 /usr/local/bin/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
https://10.4.7.134:2379 is healthy: successfully committed proposal: took = 7.187429ms
https://10.4.7.135:2379 is healthy: successfully committed proposal: took = 9.889493ms
https://10.4.7.136:2379 is healthy: successfully committed proposal: took = 9.548355ms

master节点及node节点部署docker:
配置harbor客户端证书同步:
root@k8s-ansible:/etc/kubeasz# vim roles/docker/tasks/main.yml
37       - "/etc/docker/certs.d/www.awen.com"
harbor公钥
root@k8s-harbor:/apps/crest# scp awen.com.crt  10.4.7.133:/etc/kubeasz/roles/docker/template
root@k8s-harbor:/apps/crest# scp awen.com.crt  10.4.7.133:/etc/kubeasz/roles/docker/files
root@k8s-harbor: scp /apps/harbor/certs/awen.com.crt root@10.4.7.131:/etc/docker/certs.d/www.awen.com/
root@k8s-ansible:/etc/kubeasz# vim roles/docker/tasks/main.yml
80     - name: docker证书分发
81       copy: src=awen.com.crt dest=/etc/docker/certs.d/www.awen.com/  mode=0644

配置harbor域名解析:
 83     - name: 添加域名解析  
 84       shell: "echo '10.4.7.131 www.awen.com' >> /etc/hosts"

自动分发-harbor客户端证书到各master及node节点
root@k8s-ansible:/etc/kubeasz# ./ezctl setup k8s-01 03


root@k8s-master1:~# docker login www.awen.com
Username: admin  
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

部署master节点:
root@k8s-ansible:/etc/kubeasz# docker pull registry.cn-hangzhou.aliyuncs.com/zhangshijie/pause:3.9
root@k8s-ansible:/etc/kubeasz# docker tag registry.cn-hangzhou.aliyuncs.com/zhangshijie/pause:3.9 www.awen.com/baseimages/pause:3.9
root@k8s-master1:~# docker push www.awen.com/baseimages/pause:3.9


root@k8s-ansible:/etc/kubeasz# vi clusters/k8s-01/config.yml
 50 # [containerd]基础容器镜像
 51 SANDBOX_IMAGE: "www.awen.com/baseimages/pause:3.9"

root@k8s-ansible:/etc/kubeasz# vi roles/kube-node/templates/kubelet.service.j2
42   --pod-infra-container-image={{ SANDBOX_IMAGE }} \  #这个service文件会同步每个,master node
改为
42   --pod-infra-container-image=www.awen.com/baseimages/pause:3.9 \

node节点下载镜像不需要登录

部署master节点
root@k8s-ansible:/etc/kubeasz# ./ezctl setup k8s-01 04

root@k8s-ansible:/etc/kubeasz# kubectl get nodes
NAME         STATUS                     ROLES    AGE   VERSION
10.4.7.134   Ready,SchedulingDisabled   master   23s   v1.23.1
10.4.7.135   Ready,SchedulingDisabled   master   23s   v1.23.1

部署node节点
root@k8s-ansible:/etc/kubeasz# ./ezctl setup k8s-01 05
root@k8s-ansible:/etc/kubeasz# kubectl get nodes
NAME         STATUS                     ROLES    AGE    VERSION
10.4.7.134   Ready,SchedulingDisabled   master   104s   v1.23.1
10.4.7.135   Ready,SchedulingDisabled   master   104s   v1.23.1
10.4.7.137   Ready                      node     19s    v1.23.1
10.4.7.138   Ready                      node     19s    v1.23.1

部署网络
root@k8s-ansible:/etc/kubeasz# ./ezctl setup k8s-01 06

root@k8s-master1:~# calicoctl  node status
Calico process is running.

IPv4 BGP status
+--------------+-------------------+-------+----------+-------------+
| PEER ADDRESS |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+--------------+-------------------+-------+----------+-------------+
| 10.4.7.135   | node-to-node mesh | up    | 12:38:04 | Established |
| 10.4.7.137   | node-to-node mesh | up    | 12:38:04 | Established |
| 10.4.7.138   | node-to-node mesh | up    | 12:38:04 | Established |
+--------------+-------------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.

root@k8s-master1:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.4.7.254      0.0.0.0         UG    0      0        0 eth0
10.4.7.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.200.118.0    10.4.7.137      255.255.255.192 UG    0      0        0 tunl0
10.200.138.192  10.4.7.138      255.255.255.192 UG    0      0        0 tunl0
10.200.182.0    0.0.0.0         255.255.255.192 U     0      0        0 *
10.200.192.0    10.4.7.135      255.255.255.192 UG    0      0        0 tunl0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0


添加master节点
root@k8s-ansible:/etc/kubeasz# ./ezctl --help
Usage: ezctl COMMAND [args]
-------------------------------------------------------------------------------------
Cluster setups:
    list                             to list all of the managed clusters
    checkout    <cluster>            to switch default kubeconfig of the cluster
    new         <cluster>            to start a new k8s deploy with name 'cluster'
    setup       <cluster>  <step>    to setup a cluster, also supporting a step-by-step way
    start       <cluster>            to start all of the k8s services stopped by 'ezctl stop'
    stop        <cluster>            to stop all of the k8s services temporarily
    upgrade     <cluster>            to upgrade the k8s cluster
    destroy     <cluster>            to destroy the k8s cluster
    backup      <cluster>            to backup the cluster state (etcd snapshot)
    restore     <cluster>            to restore the cluster state from backups
    start-aio                        to quickly setup an all-in-one cluster with 'default' settings

Cluster ops:
    add-etcd    <cluster>  <ip>      to add a etcd-node to the etcd cluster
    add-master  <cluster>  <ip>      to add a master node to the k8s cluster
    add-node    <cluster>  <ip>      to add a work node to the k8s cluster
    del-etcd    <cluster>  <ip>      to delete a etcd-node from the etcd cluster
    del-master  <cluster>  <ip>      to delete a master node from the k8s cluster
    del-node    <cluster>  <ip>      to delete a work node from the k8s cluster

Extra operation:
    kcfg-adm    <cluster>  <args>    to manage client kubeconfig of the k8s cluster

Use "ezctl help <command>" for more information about a given command.

root@k8s-ansible:/etc/kubeasz# ./ezctl add-master k8s-01 10.4.7.136
root@k8s-ansible:/etc/kubeasz# kubectl get nodes
NAME         STATUS                     ROLES    AGE   VERSION
10.4.7.134   Ready,SchedulingDisabled   master   17m   v1.23.1
10.4.7.135   Ready,SchedulingDisabled   master   17m   v1.23.1
10.4.7.136   Ready,SchedulingDisabled   master   3m    v1.23.1
10.4.7.137   Ready                      node     15m   v1.23.1
10.4.7.138   Ready                      node     15m   v1.23.1

添加node节点
root@k8s-ansible:/etc/kubeasz# ./ezctl add-node k8s-01 10.4.7.139

root@k8s-master1:~# kubectl get node
NAME         STATUS                     ROLES    AGE   VERSION
10.4.7.134   Ready,SchedulingDisabled   master   34m   v1.23.1
10.4.7.135   Ready,SchedulingDisabled   master   34m   v1.23.1
10.4.7.136   Ready,SchedulingDisabled   master   20m   v1.23.1
10.4.7.137   Ready                      node     33m   v1.23.1
10.4.7.138   Ready                      node     33m   v1.23.1
10.4.7.139   Ready                      none     62s   v1.23.1

root@k8s-master1:~# kubectl apply -f coredns-v1.8.6.yaml
serviceaccount/coredns created
clusterrole.rbac.authorization.k8s.io/system:coredns created
clusterrolebinding.rbac.authorization.k8s.io/system:coredns created
configmap/coredns created
deployment.apps/coredns created
service/kube-dns created


root@k8s-master2:/etc/docker# docker pull kubernetesui/dashboard:v2.5.1
v2.5.1: Pulling from kubernetesui/dashboard
d1d01ae59b08: Pull complete
a25bff2a339f: Pull complete
Digest: sha256:cc746e7a0b1eec0db01cbabbb6386b23d7af97e79fa9e36bb883a95b7eb96fe2
Status: Downloaded newer image for kubernetesui/dashboard:v2.5.1
docker.io/kubernetesui/dashboard:v2.5.1
root@k8s-master2:/etc/docker# docker tag kubernetesui/dashboard:v2.5.1 www.awen.com/baseimages/dashboard:v2.5.1
root@k8s-master2:/etc/docker# docker push  www.awen.com/baseimages/dashboard:v2.5.1
e98b3744f758: Pushed
dab46c9f5775: Pushed
v2.5.1: digest: sha256:0c82e96241aa683fe2f8fbdf43530e22863ac8bfaddb0d7d30b4e3a639d4e8c5 size: 736

root@k8s-master2:/etc/docker# docker pull kubernetesui/metrics-scraper:v1.0.8
v1.0.8: Pulling from kubernetesui/metrics-scraper
978be80e3ee3: Pull complete
5866d2c04d96: Pull complete
Digest: sha256:76049887f07a0476dc93efc2d3569b9529bf982b22d29f356092ce206e98765c
Status: Downloaded newer image for kubernetesui/metrics-scraper:v1.0.8
docker.io/kubernetesui/metrics-scraper:v1.0.8
root@k8s-master2:/etc/docker# docker tag kubernetesui/metrics-scraper:v1.0.8 www.awen.com/baseimages/metrics-scraper:v1.0.8
root@k8s-master2:/etc/docker# docker push www.awen.com/baseimages/metrics-scraper:v1.0.8
The push refers to repository [www.awen.com/baseimages/metrics-scraper]
bcec7eb9e567: Pushed
d01384fea991: Pushed
v1.0.8: digest: sha256:43227e8286fd379ee0415a5e2156a9439c4056807e3caa38e1dd413b0644807a size: 736

root@k8s-master2:/etc/docker# docker tag kubernetesui/metrics-scraper:v1.0.7 www.awen.com/baseimages/metrics-scraper:v1.0.7
root@k8s-master2:/etc/docker# docker push www.awen.com/baseimages/metrics-scraper:v1.0.7
The push refers to repository [www.awen.com/baseimages/metrics-scraper]
7813555162f0: Pushed
10d0ebb29e3a: Pushed
v1.0.7: digest: sha256:76eb73afa0198ac457c760887ed7ebfa2f58adc09205bd9667b3f76652077a71 size: 736

root@k8s-master1:~# kubectl apply -f dashboard-v2.5.1.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created

root@k8s-master1:~# kubectl get secret -n kubernetes-dashboard
NAME                               TYPE                                  DATA   AGE
default-token-2tpc6                kubernetes.io/service-account-token   3      2m14s
kubernetes-dashboard-certs         Opaque                                0      2m14s
kubernetes-dashboard-csrf          Opaque                                1      2m14s
kubernetes-dashboard-key-holder    Opaque                                2      2m14s
kubernetes-dashboard-token-vclqk   kubernetes.io/service-account-token   3      2m14s


查看token
root@k8s-master1:~# kubectl describe secret -n kubernetes-dashboard
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6InNSU2ktek9tbk1Zcks2bFhqdFZtSG5FNFpsOW5KS2UxZXlHVEhmWkM3NzQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi12Y2xxayIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE5Y2E3OTQxLTUwMjMtNDMwYy1hZjEyLWFhYjI1ZDFjYzNhOSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.gr_NA0ptRQ9aUtyvHae59DMyRrve3ogta46N9g3vsjIcmA6mcwO8Lij670pmhpd0bIBeBUtLGUrb_K14TqAJL4SJCqvscyaWNuS2hdoBdz5WpZg2FehXlt2SULmXADBgrrxlKorge_bImWj5ofzoXzMfrxsvVCNMO3ZovKNnbSVNLjgFOnQip4U1j6hoXUAETmxTnuppFkKV6y8AjpyySiUr6HppB_9xBQAct5YTe0n5vKJmhukNjToUC1ywfPaGY4kSderlujsPaWcepz9D4VLfzYLm2vxKDh0R0Hid6EDJbpJ1a30pkAtRc5JEe8sSQDdoUxuWLReVonJc48_Tyw

创建测试容器
root@k8s-master1:~# kubectl run net-test1 --image=alpine sleep 10000000
pod/net-test1 created
root@k8s-master1:~# kubectl run net-test2 --image=alpine sleep 10000000
pod/net-test2 created
root@k8s-master1:~# kubectl run net-test3 --image=alpine sleep 10000000
pod/net-test3 created
kubectl  run busybox --image busybox:1.28 -it -- sh

root@k8s-master1:~# kubectl get pods
NAME        READY   STATUS    RESTARTS   AGE
net-test1   1/1     Running   0          42s
net-test2   1/1     Running   0          37s
net-test3   1/1     Running   0          32s

root@k8s-master1:~# kubectl exec -it net-test1 sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # ping www.baidu.com
PING www.baidu.com (14.119.104.189): 56 data bytes
64 bytes from 14.119.104.189: seq=0 ttl=127 time=39.238 ms
64 bytes from 14.119.104.189: seq=1 ttl=127 time=38.084 ms
64 bytes from 14.119.104.189: seq=2 ttl=127 time=40.290 ms
^C
--- www.baidu.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 38.084/39.204/40.290 ms
 
docker.io/calico/cni:v3.19.3
root@k8s-master1:~# docker tag calico/cni:v3.19.3  www.awen.com/baseimages/calico-cni:v3.19.3
root@k8s-master1:~# docker push www.awen.com/baseimages/calico-cni:v3.19.3
The push refers to repository [www.awen.com/baseimages/calico-cni]
c29f7d51e04b: Pushed
7c1fe35a6282: Pushed
11721ef9a0e9: Pushed
v3.19.3: digest: sha256:ac122ab20139a950309bd28f2fa5511d69c9ee337a1fb21534f52f38153215ad size: 946


v3.19.3: Pulling from calico/pod2daemon-flexvol
Digest: sha256:ed08428f8cbf68192c2934fa31db4ae67a6cd1aa47481159e84e509fd5188f81
Status: Image is up to date for calico/pod2daemon-flexvol:v3.19.3
docker.io/calico/pod2daemon-flexvol:v3.19.3
root@k8s-master1:~# docker tag docker.io/calico/pod2daemon-flexvol:v3.19.3 www.awen.com/baseimages/calico-pod2daemon-flexvol:v3.19.3
root@k8s-master1:~#  docker push www.awen.com/baseimages/calico-pod2daemon-flexvol:v3.19.3
The push refers to repository [www.awen.com/baseimages/calico-pod2daemon-flexvol]
fb3f05f119d6: Pushed
e0b924e3cec0: Pushed
3b3401d7b4af: Pushed
bfe49c55aaee: Pushed
90d2c07f233d: Pushed
ef32a8de905f: Pushed
72c95e9735b7: Pushed
v3.19.3: digest: sha256:24d28d47d36823669a2fbd9f8f0135f27f15b393dcf771d533c28897264bedd9 size: 1788


root@k8s-master1:~# docker pull calico/kube-controllers:v3.19.3
v3.19.3: Pulling from calico/kube-controllers
Digest: sha256:9079351b7d6871bda159f77c2f917c04d6a7a71cb08bcab5171542f1081cb780
Status: Image is up to date for calico/kube-controllers:v3.19.3
docker.io/calico/kube-controllers:v3.19.3
root@k8s-master1:~# docker tag calico/kube-controllers:v3.19.3 www.awen.com/baseimages/calico-kube-controllers:v3.19.3
root@k8s-master1:~# docker push www.awen.com/baseimages/calico-kube-controllers:v3.19.3
The push refers to repository [www.awen.com/baseimages/calico-kube-controllers]
a699cc477a5a: Pushed
9ce8e113ac65: Pushed
dbe141c11604: Pushed
278d839559a1: Pushed
v3.19.3: digest: sha256:64344f7ca801b6043d4439f02ea674c7eb359d30da96f765dcec3d8fd387d196 size: 1155


root@k8s-master1:~# docker pull calico/node:v3.19.3
v3.19.3: Pulling from calico/node
Digest: sha256:a9b54f6fc3a22088c3dddbb1b268971df9003dd6170a6a92f82210e1311d1c41
Status: Image is up to date for calico/node:v3.19.3
docker.io/calico/node:v3.19.3
root@k8s-master1:~# docker tag calico/node:v3.19.3 www.awen.com/baseimages/calico-node:v3.19.3
root@k8s-master1:~# docker push www.awen.com/baseimages/calico-node:v3.19.3
The push refers to repository [www.awen.com/baseimages/calico-node]
5c8b8d7a47a1: Pushed
803fb24398e2: Pushed
v3.19.3: digest: sha256:d84a6c139c86fabc6414267ee4c87879d42d15c2e0eaf96030c91a59e27e7a6f size: 737
 

 

 

posted on 2023-03-04 16:25  倔强不屈的阿文  阅读(9)  评论(0)    收藏  举报

导航