K8s – CoreDNS

服务发现

服务之间互相定位的过程,以适应如下服务特点:

  • 动态性强;
  • 更新发布频繁;
  • 支持自动伸缩;

在k8s集群里,pod ip是不断变化的,如何找到对应的pods?首先集群网络抽象了集群IP,Service资源绑定Cluster IP并暴露这个资源,Service本身根据标签选择器,来锁定一组pods,并通过ipvs算法分配这组pods的资源。也可以参考上一篇的总结:管理Service资源

那么新的问题来了,虽然可以通过Service找到pod,但如果有很多不同的Services,很难把所有Services与Customer IP的关系记下来,这个是不是很像DNS被创造出来的初衷^_^~?那我们是否可以通过类似DNS的机制,绑定Service和Cluster IP呢?答案是肯定的:

  • Kube-dns,k8s v1.10之前默认使用;
  • Coredns,k8s v1.11以后默认使用;

安装部署CoreDNS

完整阅读

K8s – CNI Network Component

我看的教程算是2020年初的,所以根据现在的时间,已经过去两年半了,下面的信息不一定很准确,后面如果哪里不正确,随着学习的深入,再更改和说明。CNI的全程是Container Network Interface,主要为了解决Pod资源在不同宿主机之间互通的。

常见CNI组件

所有CNI都部署在node节点;

  • Flannel,19年的市场占有率38%;
  • Calico,19年的市场占有率35%;
  • Canal:结合了flannel和calico;19年的市场占有率5%;
  • Contiv:思科开源的;
  • OpenContrail:Juniper开源的;
  • NSX-T:vmware开源的;
  • Kube-router:试图取代kube-proxy,但使用的不多;

Flannel

安装部署Flannel

可以从Github上直接下载,目前Link在这里:https://github.com/flannel-io/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz,但国内环境可能不好,所以需要科学上网或者多尝试几次;分别在node13和node14上部署Flannel:

完整阅读

K8s – Core Resource Management Method

陈述式管理(CLI)

陈述式管理方式主要通过kubectl来进行管理,kubectl用于与apiserver进行通信,实现管理k8s各种资源的一种有效途径;

管理名称空间

查看名称空间

下面显示的都是默认生成的命名空间,简称为kubectl get ns

root@f0-13:~# kubectl get namespace
NAME              STATUS   AGE
default           Active   44h
kube-node-lease   Active   44h
kube-public       Active   44h
kube-system       Active   44h

查询特定命名空间中的所有资源,下面是default命名空间:

root@f0-13:~# kubectl get all -n default
NAME                 READY   STATUS    RESTARTS   AGE
pod/nginx-ds-lc59t   1/1     Running   0          39h
pod/nginx-ds-pkh75   1/1     Running   0          39h


NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.254.0.1   <none>        443/TCP   44h

NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/nginx-ds   2         2         2       2            2           <none>          39h
完整阅读

Manual set up two containers by “docker run”

安装docker步骤此处忽略,详细可以看之前的文章

容器的网络类型

默认docker三种网络:

[root@localhost ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
0dc7621fa6c0   bridge    bridge    local
09d08085f98c   host      host      local
8da76deb9eb9   none      null      local

先随便开一个centos的docker,“-t” 指定一个伪终端,保持docker可以打开,否则会出现“Exited (0)”的问题:

[root@localhost ~]# docker run --name centos -dt centos

查看容器的网络类型,可以看到当创建容器不指定网络类型,默认会绑定到bridge上:

[root@localhost ~]# docker inspect 355a |grep "Networks" -A 100
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "0dc7621fa6c0e40a1129104ed94deac543cf82ce44ab79fdf7ed38b9975f9a78",
                    "EndpointID": "2dae4a431efd76066081424e47a7e6bc53e4102b14bf36bbdfda34492efd6369",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
完整阅读

K8s – Manual Deployment

终于尝试手动部署K8s了,在此感谢朋友分享的”老男孩“教学视频👍🏻。以及朋友分享的实验环境(基于EVE-NG);持续大半年的拉锯战,总算完成了基础组件的全部部署 ^_^

更新说明:

  • 2022-01-17:更新拓扑信息;
  • 2022-01-19:添加基础配置;
  • 2022-01-23:添加证书配置及Bind9部署;
  • 2022-01-25:添加Docker及私有仓库Harbor相关部署配置;
  • 2022-07到08两个月时间:完成etdc,apiserver,kube-controller-manager,kube-scheduler,kubelet和kube-proxy的部署;

Topology

基础配置

端口配置

只展示frank0-11,其他Server等同;

root@frank0-11:~# more /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens3:
      dhcp4: false
      addresses: [172.20.0.11/24]
      gateway4: 172.20.0.1
      nameservers:
        addresses: [114.114.114.114]
  version: 2
root@frank0-12:~# netplan apply
完整阅读
blonde teen swallows load.xxx videos