Skip to content

Latest commit

 

History

History
617 lines (443 loc) · 46.9 KB

CHANGELOG.md

File metadata and controls

617 lines (443 loc) · 46.9 KB

CHANGELOG

v1.2.0

What's New

Improve edge autonomy capability when cloud-edge network off

The original edge autonomy feature can make the pods on nodes un-evicted even if node crashed by adding annotation to node, and this feature is recommended to use for scenarios that pods should bind to node without recreation. After improving edge autonomy capability, when the reason of node NotReady is cloud-edge network off, pods will not be evicted because leader yurthub will help these offline nodes to proxy their heartbeats to the cloud via pool-coordinator component, and pods will be evicted and recreated on other ready node if node crashed.

By the way, The original edge autonomy capability by annotating node (with node.beta.openyurt.io/autonomy) will be kept as it is, which will influence all pods on autonomy nodes. And a new annotation (named apps.openyurt.io/binding) can be added to workload to enable the original edge autonomy capability for specified pod.

Reduce the control-plane traffic between cloud and edge

Based on the Pool-Coordinator in the nodePool, A leader Yurthub will be elected in the nodePool. Leader Yurthub will list/watch pool-scope data(like endpoints/endpointslices) from cloud and write into pool-coordinator. then all components(like kube-proxy/coredns) in the nodePool will get pool-scope data from pool-coordinator instead of cloud kube-apiserver, so large volume control-plane traffic will be reduced.

Use raven component to replace yurt-tunnel component

Raven has released version v0.3, and provide cross-regional network communication ability based on PodIP or NodeIP, but yurt-tunnel can only provide cloud-edge requests forwarding for kubectl logs/exec commands. because raven provides much more than the capabilities provided by yurt-tunnel, and raven has been proven by a lot of work. so raven component is officially recommended to replace yurt-tunnel.

Other Notable changes

  • proposal of yurtadm join refactoring by @YTGhost in openyurtio#1048
  • [Proposal] edgex auto-collector proposal by @LavenderQAQ in openyurtio#1051
  • add timeout config in yurthub to handle those watch requests by @AndyEWang in openyurtio#1056
  • refactor yurtadm join by @YTGhost in openyurtio#1049
  • expose helm values for yurthub cacheagents by @huiwq1990 in openyurtio#1062
  • refactor yurthub cache to adapt different storages by @Congrool in openyurtio#882
  • add proposal of static pod upgrade model by @xavier-hou in openyurtio#1065
  • refactor yurtadm reset by @YTGhost in openyurtio#1075
  • bugfix: update the dependency yurt-app-manager-api from v0.18.8 to v0.6.0 by @YTGhost in openyurtio#1115
  • Feature: yurtadm reset/join modification. Do not remove k8s binaries, add flag for using local cni binaries. by @Windrow14 in openyurtio#1124
  • Improve certificate manager by @rambohe-ch in openyurtio#1133
  • fix: update package dependencies by @fengshunli in openyurtio#1149
  • fix: add common builder by @fengshunli in openyurtio#1152
  • generate yurtadm docs by @huiwq1990 in openyurtio#1159
  • add inclusterconfig filter for commenting kube-proxy configmap by @rambohe-ch in openyurtio#1158
  • delete yurt tunnel helm charts by @River-sh in openyurtio#1161

Fixes

  • bugfix: StreamResponseFilter of data filter framework can't work if size of one object is over 32KB by @rambohe-ch in openyurtio#1066
  • bugfix: add ignore preflight errors to adapt kubeadm before version 1.23.0 by @YTGhost in openyurtio#1092
  • bugfix: dynamically switch apiVersion of JoinConfiguration to adapt to different versions of k8s by @YTGhost in openyurtio#1112
  • bugfix: yurthub can not exit when SIGINT/SIGTERM happened by @rambohe-ch in openyurtio#1143

Contributors

Thank you to everyone who contributed to this release!

And thank you very much to everyone else not listed here who contributed in other ways like filing issues, giving feedback, helping users in community group, etc.

v1.1.0

What's New

Support OTA/Auto upgrade model for DaemonSet workload

Extend native DaemonSet OnDelete upgrade model by providing OTA and Auto two upgrade models.

  • OTA: workload owner can control the upgrade of workload through the exposed REST API on edge nodes.
  • Auto: Solve the DaemonSet upgrade process blocking problem which caused by node NotReady when the cloud-edge is disconnected.

Support autonomy feature validation in e2e tests

In order to test autonomy feature, network interface of control-plane is disconnected for simulating cloud-edge network disconnected, and then stop components(like kube-proxy, flannel, coredns, etc.) and check the recovery of these components.

Improve the Yurthub configuration for enabling the data filter function

Compares to the previous three configuration items, which include the component name, resource, and request verb. after improvement, only component name is need to configure for enabling data filter function. the original configuration format is also supported in order to keep consistency.

Other Notable changes

  • cache agent change optimize by @huiwq1990 in openyurtio#1008
  • Check if error via ListKeys of Storage Interface. by @fujitatomoya in openyurtio#1015
  • Add released openyurt versions to projectInfo when building binaries by @Congrool in openyurtio#1016
  • add auto pod upgrade controller for daemoset by @xavier-hou in openyurtio#970
  • add ota update RESTful API by @xavier-hou in openyurtio#1004
  • make servicetopology filter in yurthub work properly when service or nodepool change by @LinFCai in openyurtio#1019
  • improve data filter framework by @rambohe-ch in openyurtio#1025
  • add proposal to unify cloud edge comms solution by @zzguang in openyurtio#1027
  • improve health checker for adapting coordinator by @rambohe-ch in openyurtio#1032
  • Edge-autonomy-e2e-test implementation by @lorrielau in openyurtio#1022
  • improve e2e tests for supporting mac env and coredns autonomy by @rambohe-ch in openyurtio#1045
  • proposal of yurthub cache refactoring by @Congrool in openyurtio#897

Fixes

  • even no endpoints left after filter, an empty object should be returned to clients by @rambohe-ch in openyurtio#1028
  • non resource handle miss for coredns by @rambohe-ch in openyurtio#1044

Contributors

Thank you to everyone who contributed to this release!

And thank you very much to everyone else not listed here who contributed in other ways like filing issues, giving feedback, helping users in community group, etc.

v1.0

We're excited to announce the release of OpenYurt 1.0.0!🎉🎉🎉

Thanks to all the new and existing contributors who helped make this release happen!

If you're new to OpenYurt, feel free to browse OpenYurt website, then start with OpenYurt Installation and learn about its core concepts.

Acknowledgements ❤️

Nearly 20 people have contributed to this release and 8 of them are new contributors, Thanks to everyone!

@huiwq1990 @Congrool @zhangzhenyuyu @rambohe-ch @gnunu @LinFCai @guoguodan @ankyit @luckymrwang @zzguang @hxcGit @Sodawyx @luc99hen @River-sh @slm940208 @windydayc @lorrielau @fujitatomoya @donychen1134

What's New

API version

The version of NodePool API has been upgraded to v1beta1, more details in the openyurtio/yurt-app-manager#104

Meanwhile, all APIs management in OpenYurt will be migrated to openyurtio/api repo, and we recommend you to import this package to use APIs of OpenYurt.

Code Quality

We track unit test coverage with CodeCov Code coverage for some repos as following:

  • openyurtio/openyurt: 47%
  • openyurtio/yurt-app-manager: 37%
  • openyurtio/raven: 53%

and more details of unit tests coverage can be found in https://codecov.io/gh/openyurtio

In addition to unit tests, other levels of testing are also added.

Performance Test

OpenYurt makes Kubernetes work in cloud-edge collaborative environment with a non-intrusive design. so performance of some OpenYurt components have been considered carefully. several test reports have been submitted so that end users can clearly see the working status of OpenYurt components.

Installation Upgrade

early installation way(convert K8s to OpenYurt) is removed. OpenYurt Cluster installation is divided into two parts:

and all Control Plane Components of OpenYurt are managed by helm charts in repo: https://github.com/openyurtio/openyurt-helm

Other Notable changes

  • upgrade kubeadm to 1.22 by @huiwq1990 in openyurtio#864
  • [Proposal] Proposal to install openyurt components using helm by @zhangzhenyuyu in openyurtio#849
  • support yurtadm token subcommand by @huiwq1990 in openyurtio#875
  • bugfix: only set signer name when not nil in order to prevent panic. by @rambohe-ch in openyurtio#877
  • [proposal] add proposal of multiplexing cloud-edge traffic by @rambohe-ch in openyurtio#804
  • yurthub return fake token when edge node disconnected with K8s APIServer by @LinFCai in openyurtio#868
  • deprecate cert-mgr-mode option of yurthub by @Congrool in openyurtio#901
  • [Proposal] add proposal of daemosnet update model by @hxcGit in openyurtio#921
  • fix: cache the server version info of kubernetes by @Sodawyx in openyurtio#936
  • add yurt-tunnel-dns yaml by @rambohe-ch in openyurtio#956
  • Separate YurtHubHost & YurtHubProxyHost by @luc99hen in openyurtio#959
  • merge endpoints filter into service topology filter by @rambohe-ch in openyurtio#963
  • support yurtadm join to join multiple master nodes by @windydayc in openyurtio#964
  • feature: add lantency metrics for yurthub by @luc99hen in openyurtio#965
  • bump ginkgo to v2 by @lorrielau in openyurtio#945
  • beta.kubernetes.io is deprecated, use kubernetes.io instead by @fujitatomoya in openyurtio#969

Full Changelog: https://github.com/openyurtio/openyurt/compare/v0.7.0...v1.0.0-rc1

Thanks again to all the contributors!


v0.7.0

What's New

Raven: enable edge-edge and edge-cloud communication in a non-intrusive way

Raven is component of the OpenYurt to enhance cluster networking capabilities. This enhancement is focused on edge-edge and edge-cloud communication in OpenYurt. It will provide layer 3 network connectivity among pods in different physical regions, as there are in one vanilla Kubernetes cluster. More information can be found at: ((#637, Raven, @DrmagicE, @BSWANG, @njucjc)

Support Kubernetes V1.22

Enable OpenYurt can work on the Kubernetes v1.22, includes adapting API change(such as v1beta1.CSR deprecation), adapt StreamingProxyRedirects feature and handle v1.EndpointSlice in service topology and so on. More information can be found at: (#809, #834, @rambohe-ch, @JameKeal, @huiwq1990)

Support EdgeX Foundry V2.1

Support EdgeX Foundry Jakarta version, and EdgeX Jakarta is the first LTS version and be widely considered as a production ready version. More information can be found at: (#4, #30, @lwmqwer, @wawlian, @qclc)

Support IPv6 network in OpenYurt

Support OpenYurt can run on the IPv6 network environment. More information can be found at: (#842, @tydra-wang)

Other Notable Changes

Bug Fixes

  • ungzip response by yurthub when response header contains content-encoding=gzip (#794, @rambohe-ch)
  • fix mistaken selflink in yurthub (#785, @Congrool)

v0.6.0

What's New

Support YurtAppDaemon to deploy workload to different NodePools

A YurtAppDaemon ensures that all (or some) NodePools run a copy of a Deployment or StatefulSet. As nodepools are added to the cluster, Deployment or StatefulSet are added to them. As nodepools are removed from the cluster, those Deployments or StatefulSet are garbage collected. The behavior of YurtAppDaemon is similar to that of DaemonSet, except that YurtAppDaemon creates workloads from a node pool. More information can be found at: (#422, yurt-app-manager, @kadisi)

Using YurtIngress to unify service across NodePools

YurtIngress acts as a unified interface for services access request from outside the NodePool, it abstracts and simplifies service access logic to users, it also reduces the complexity of NodePool services management. More information can be found at: (#373, #645, yurt-app-manager, @zzguang, @gnunu, @LindaYu17)

Improve the user experience of OpenYurt

  • OpenYurt Experience Center

New users who want to try out OpenYurt's capabilities do not need to install an OpenYurt cluster from scratch. They can apply for a test account on the OpenYurt Experience Center and immediately have an OpenYurt cluster available. More information can be found at: (OpenYurt Experience Center Introduction, @luc99hen, @qclc, @Peeknut)

  • YurtCluster

This YurtCluster Operator is to translate a vanilla Kubernetes cluster into an OpenYurt cluster, through a simple API (YurtCluster CRD). And we recommend that you do the cluster conversion based on the declarative API of YurtCluster Operator. More information can be found at: (#389, #518, yurtcluster-operator, @SataQiu, @gnunu)

  • Yurtctl init/join

In order to improve efficiency of creating OpenYurt cluster, a new tool named sealer has been integrated into yurtctl init command. and OpenYurt cluster image(based on Kubernetes v1.19.7 version) has been prepared. Users can use yurtctl init command to create OpenYurt cluster control-plane, and use yurtctl join to add worker nodes(including cloud nodes and edge nodes). More information can be found at: (#704, #697, @Peeknut, @rambohe-ch, @adamzhoul)

Update docs of OpenYurt

The docs of OpenYurt installation, core concepts, user manuals, developer manuals etc. have been updated, and all of them are located at OpenYurt Docs. Thanks to all contributors for maintaining docs for OpenYurt. (@huangyuqi, @kadisi, @luc99hen, @SataQiu, @mowangdk, @rambohe-ch, @zyjhtangtang, @qclc, @Peeknut, @Congrool, @zzguang, @adamzhoul, @windydayc, @villanel)

Other Notable Changes

Bug Fixes


v0.5.0

What's New

Manage EdgeX Foundry system in OpenYurt in a cloud-native, non-intrusive way

  • yurt-edgex-manager

    Yurt-edgex-manager enable OpenYurt to be able to manage the EdgeX lifecycle. Each EdgeX CR (Custom Resource) stands for an EdgeX instance. Users can deploy/update/delete EdgeX in OpenYurt cluster by operate the EdgeX CR directly. (yurt-edgex-manager, @yixingjia, @lwmqwer)

  • yurt-device-controller

    Yurt-device-controller aims to provider device management functionalities to OpenYurt cluster by integrating with edge computing/IOT platforms, like EdgeX in a cloud native way. It will automatically synchronize the device status to device CR (custom resource) in the cloud and any update to the device will pass through to the edge side seamlessly. More information can be found at: (yurt-device-controller, @charleszheng44, @qclc, @Peeknut, @rambohe-ch, @yixingjia)

Yurt-tunnel support more flexible settings for forwarding requests from cloud to edge

  • Support forward https request from cloud to edge for components(like prometheus) on the cloud nodes can access the https service(like node-exporter) on the edge node. Please refer to the details: (#442, @rambohe-ch, @Fei-Guo, @DrmagicE, @SataQiu)

  • support forward cloud requests to edge node's localhost endpoint for components(like prometheus) on cloud nodes collect edge components(like yurthub) metrics(http://127.0.0.1:10267). Please refer to the details: (#443, @rambohe-ch, @Fei-Guo)

Other Notable Changes

Bug Fixes

  • fix incomplete data copy of resource filter (#452, @SataQiu)
  • remove excess chan that will block the program (#446, @zc2638)
  • use buffered channel for signal notifications (#471, @SataQiu)
  • add create to yurt-tunnel-server ClusterRole (#500, adamzhoul)

v0.4.1

What's New

Join or Reset node in one step

In order to enable users to use OpenYurt clusters quickly and reduce the cost of users learning OpenYurt, yurtctl has provided the subcommands convert and revert, to implement the conversion between OpenYurt cluster and Kubernetes cluster. However, It still has some shortcomings:

  • No support for new nodes to join the cluster directly;
  • Users are required to pre-built a kubernetes cluster, and then do conversion, which has a relatively high learning cost for beginners.

So, we need to add subcommands init, join, reset for yurtctl. and join and reset subcommands can be used in v0.4.1, and init subcommand will comes in next version. Please refer to the proposal doc and usage doc for details. (#387, #402, @zyjhtangtang)

Support Pods use InClusterConfig access kube-apiserver through yurthub

Many users in OpenYurt community have requested that support InClusterConfig for pods to access kube-apiserver through yurthub on edge nodes. so pods on cloud can move to edge cluster smoothly. so we add the following features.

  • yurthub supports https serve.
  • env KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT should be the address that yurthub listening, like 169.254.2.1:10261

Please refer to the issue #372 for details. (#386, #394, @luckymrwang, @rambohe-ch)

Support filter cloud response data on edge side

In the cloud-edge scenario, In response to requests from edge components (such as kube-proxy) or user pods to the cloud, it is hoped that some customized processing can be performed on the data returned by the cloud, we consider providing a generic data filtering framework in the yurthub component, which can customize the data returned from the cloud without being aware of the edge components and user pods, so as to meet business needs simply and conveniently. And provides two specific filtering handlers.

  1. support endpointslice filter for keeping service traffic in-bound of nodePool
  2. support master service mutation for pod use InClusterConfig access kube-apiserver

Please refer to the Proposal doc for details. (#388, #394, @rambohe-ch, @Fei-Guo)

Other Notable Changes

  • Yurtctl modify kube-controllersetting to close the nodelifecycle-controller (#399, @Peeknut)
  • Proposal: EdgeX integration with OpenYurt (#357, @yixingjia, @lwmqwer)
  • Proposal: add ingress feature support to nodepool (#373, @zzguang, @wenjun93)
  • Proposal: OpenYurt Convertor Operator for converting K8S to OpenYurt (#389, @gnunu)
  • add traffic(from cloud to edge) collector metrics for yurthub (#398, @rambohe-ch)
  • Add sync.Pool to cache *bufio.Reader in tunnel server (#381, @DrmagicE)
  • improve tunnel availability (#375, @aholic)
  • yurtctl adds parameter enable app manager to control automatic deployment of yurtappmanager. (#352, @yanhui)

Bug Fixes

  • fix tunnel-agent/tunnel-server crashes when the local certificate can not be loaded correctly (#378, @SataQiu)
  • fix the error when cert-mgr-mode set to kubelet (#359, @qclc)
  • fix the same prefix key lock error (#396, @rambohe-ch)

v0.4.0

What's New

Node Resource Manager Released

Node resource manager is released in this version, which provides local node resources management of OpenYurt cluster in a unified manner. It currently supports LVM, QuotaPath and Pmem, and create or update the compute, storage resources based on local devices. It works as daemonset spread on each edge node, and manages local resources with a predefined spec stored in configmap. Please refer to the usage doc for details. (#1, @mowangdk, @wenjun93)

Add Cloud Native IOT Device Management API definition

Inspiring by the Unix philosophy, "Do one thing and do it well", we believe that Kubernetes should focus on managing computing resources while edge devices management can be done by adopting existing edge computing platforms. Therefore, we define several generic custom resource definitions(CRD) that act as the mediator between OpenYurt and the edge platform. Any existing edge platforms can be integrated into the OpenYurt by implementing custom controllers for these CRDs. In addition, these CRDs allow users to manage edge devices in a declarative way, which provides users with a Kubernetes-native experience.(#233, #236, @Fei-Guo, @yixingjia, @charleszheng44)

Kubernetes V1.18 is supported

OpenYurt officially supports version v1.18 of Kubernetes. Now, OpenYurt users are able to convert v1.18 Kubernetes cluster to OpenYurt cluster or deploy components of OpenYurt on v1.18 Kubernetes cluster manually. the main work for supporting v1.18 Kubernetes as following:

  1. refactor serializer of cache manager to adapt ClientNegotiator in k8s.io/apimachinery v0.18
  2. add context parameter in api for calling client-go v0.18

and based on Kubernetes compatibility, v1.16 Kubernetes is still supported. (#288, @rambohe-ch)

UnitedDeployment support patch for pool

UnitedDeployment controller provides a new way to manage pods in multi-pool by using multiple workloads. Each workload managed by UnitedDeployment is called a pool and user can only configure the workload replicas in the pool. Based on the patch feature, besides the workload replicas configuration, user can easily configure other fields(like images and resoures) of workloads in the pool.(#242, #12, @kadisi)

Support caching CRD resources by yurthub

Because resources in the resourceToKindMap can be cached by yurt-hub component, when network between cloud and edge disconnected, if any pod(eg: calico) on the edge node that used some resources(like crd) not in the above map want to run continuously, that is to say, the pod can not restarted successfully because resources(like crd) are not cached by yurt-hub. This PR can solve this limitation. Now yurt-hub is able to cache all kubernetes resources, including crd resource that defined by user.(#162, #231, #225, #265, @qclc, @rambohe-ch)

Prometheus and Yurt-Tunnel-Server cross-node deployment is supported via DNS

In the edge computing scenario, the IP addresses of the edge nodes are likely to be the same. So we can not rely on the node IP to forward the request but should use the node hostname(unique in one cluster). This PR provides the ability for the yurt-tunnel-server to handle requests in the form of scheme://[hostname]:[port]/[req_path].(#270, #284, @SataQiu, @rambohe-ch)

Support kind cluster and node level conversion by yurtctl

OpenYurt supports the conversion between the OpenYurt cluster and the Kubernetes cluster created by minikube, kubeadm, and ack. Now OpenYurt supports the conversion between kind cluster and OpenYurt cluster. (#230, #206, #220, #234, @Peeknut)

Other Notable Changes

Bug Fixes

  • fix list runtimeclass and csidriver from cache error when cloud-edge network disconnected (#258, @rambohe-ch)
  • fix the error of cluster status duration statistics (#295, @zyjhtangtang)
  • fix bug when ServeHTTP panic (#198, @aholic)
  • solve ips repeated question from addr.go (#209, @luhaopei)
  • fix t.Fatalf from a non-test goroutine (#269, @contrun)
  • Uniform label for installation of yurt-tunnel-agent openyurt.io/is-edge-worker=true (#275, @yanhui)
  • fix the bug that dns controller updates dns records incorrectly (#283, @SataQiu)
  • It solves the problem that the cloud node configuration taint (#299, @yanhui)
  • Fixed incorrect representation in code comments. (#296, @felix0080)
  • fix systemctl restart in manually-setup tutorial (#205, @DrmagicE)

v0.3.0

Project

  • Add new component Yurt App Manager that runs on cloud nodes
  • Add new provider=kubeadm for yurtctl
  • Add hubself certificate mode for yurthub
  • Support log flush for yurt-tunnel
  • New tutorials for Yurt App Manager

yurt-app-manager

  • Implement NodePool CRD that provides a convenient management experience for a pool of nodes within the same region or site
  • Implement UnitedDeployment CRD by defining a new edge application management methodology of using per node pool workload
  • Add tutorials to use Yurt App Manager

yurthub

  • Add hubself certificate mode for generating and rotating certificate that used to connect with kube-apiserver as default mode
  • Add timeout mechanism for proxying watch request
  • Optimize the response when cache data is not found

yurt-tunnel

  • Add integration test
  • Support log flush request from kube-apiserver
  • Optimize tunnel interceptor for separating context dailer and proxy request
  • Optimize the usage of sharedIndexInformer

yurtctl

  • Add new provider=kubeadm that kubernetes cluster installed by kubeadm can be converted to openyurt cluster
  • Adapt new certificate mode of yurthub when convert edge node
  • Fix image pull policy from Always to IfNotPresent for all components deployment setting

v0.2.0

Project

  • Support Kubernetes 1.16 dependency for all components
  • Support multi-arch binaries and images (arm/arm64/amd64)
  • Add e2e test framework and tests for node autonomy
  • New tutorials (e2e test and yurt-tunnel)

yurt-tunnel

Features

  • Implement yurt-tunnel-server and yurt-tunnel-agent based on Kubernetes apiserver network proxy framework
  • Implement cert-manager to manage yurt-tunnel certificates
  • Add timeout mechanism for yurt-tunnel

yurtctl

Features

  • Add global lock to prevent multiple yurtctl invocations concurrently
  • Add timeout for acquiring global lock
  • Allow user to set the label prefix used to identify edge nodes
  • Deploy yurt-tunnel using convert option

Bugs

  • Remove kubelet config bootstrap args during manual setup

v0.1.0-beta.1

yurt-controller-manager

Features

  • Avoid evicting Pods from nodes that have been marked as autonomy nodes

yurthub

Features

  • Use Kubelet certificate to communicate with APIServer
  • Implement a http proxy for all Kubelet to APIServer requests
  • Cache the responses of Kubelet to APIServer requests in local storage
  • Monitor network connectivity and switch to offline mode if health check fails
  • In offline mode, response Kubelet to APIServer requests based on the cached states
  • Resync and clean up the states once node is online again
  • Support to proxy for other node daemons

yurtctl

Features

  • Support install/uninstall all OpenYurt components in a native Kubernetes cluster
  • Pre-installation validation check