Tomu: Ein Computer für den USB-Port

Klein, kleiner, Tomu: Das ARM-Board ist eine günstige DIY-Alternative zu Hardware-Tokens und soll mit seiner USB-Größe auch andere Projekte möglich machen. Der Haken ist dabei die Software, an der gefeilt werden muss.

Quelle: Heise Tech News

Get latest Kubernetes version 1.9 on Google’s managed offering

By Palak Dalal, Product Manager

We’re excited to announce that Kubernetes version 1.9 will be available on Google Kubernetes Engine next week in our early access program. This release includes greater support for stateful and stateless applications, hardware accelerator support for machine learning workloads and storage enhancements. Overall, this release achieves a big milestone in making it easy to run a wide variety of production-ready applications on Kubernetes without having to worry about the underlying infrastructure.
Google is the leading contributor to open-source Kubernetes releases and now you can access the latest Kubernetes release on our fully-managed Kubernetes Engine, and let us take care of managing, scaling, upgrading, backing up and helping to secure your clusters. Further, we recently simplified our pricing by removing the fee for cluster management, resulting in real dollar savings for your environment.

We’re committed to providing the latest technological innovation to Kubernetes users with one new release every quarter. Let’s a take a closer look at the key enhancements in Kubernetes 1.9.

Workloads APIs move to GA

The core Workloads APIs (DaemonSet, Deployment, ReplicaSet and StatefulSet), which let you run stateful and stateless workloads in Kubernetes 1.9, move to general availability (GA) in this release, delivering production-grade quality, support and long-term backwards compatibility.

Hardware accelerator enhancements

Google Cloud Platform (GCP) provides a great environment for running machine learning and data analytics workloads in containers. With this release, we’ve improved support for hardware accelerators such as NVIDIA Tesla P100 and K80 GPUs. Compute-intensive workloads will benefit greatly from cost-effective and high performance GPUs for many use cases ranging from genomics and computational finance to recommendation systems and simulations.

Local storage enhancements for stateful applications

Improvements to the Kubernetes scheduler in this release make it easier to use local storage in Kubernetes. The local persistent storage feature (alpha) enables easy access to local SSD on GCP through Kubernetes’ standard PVC (Persistent Volume Claim) interface in a simple and portable way. This allows you to take an existing Helm Chart, or StatefulSet spec using remote PVCs, and easily switch to local storage by just changing the StorageClass name. Local SSD offers superior performance including high input/output operations per second (IOPS), low latency, and is ideal for high performance workloads, distributed databases, distributed file systems and other stateful workloads.

Storage interoperability through CSI

This Kubernetes release introduces an alpha implementation of Container Storage Interface (CSI). We’ve been working with the Kubernetes community to provide a single and consistent interface for different storage providers. CSI makes it easy to add different storage volume plugins in Kubernetes without requiring changes to the core codebase. CSI underscores our commitment to being open, flexible and collaborative while providing maximum value—and options—to our users.

Try it now!

In a few days, you can access the latest Kubernetes Engine release in your alpha clusters by joining our early access program.

Quelle: Google Cloud Platform

Introducing client-go version 6

The Kubernetes API server exposes a REST interface consumable by any client. client-go is the official client library for the Go programming language. It is used both internally by Kubernetes itself (for example, inside kubectl) as well as by numerous external consumers:operators like the etcd-operator or prometheus-operator; higher level frameworks like KubeLess and OpenShift; and many more.The version 6 update to client-go adds support for Kubernetes 1.9, allowing access to the latest Kubernetes features. While the changelog contains all the gory details, this blog post highlights the most prominent changes and intends to guide on how to upgrade from version 5.This blog post is one of a number of efforts to make client-go more accessible to third party consumers. Easier access is a joint effort by a number of people from numerous companies, all meeting in the #client-go-docs channel of the Kubernetes Slack. We are happy to hear feedback and ideas for further improvement, and of course appreciate anybody who wants to contribute.API group changesThe following API group promotions are part of Kubernetes 1.9:Workload objects (Deployments, DaemonSets, ReplicaSets, and StatefulSets) have been promoted to the apps/v1 API group in Kubernetes 1.9. client-go follows this transition and allows developers to use the latest version by importing the k8s.io/api/apps/v1 package instead of k8s.io/api/apps/v1beta1 and by using Clientset.AppsV1().Admission Webhook Registration has been promoted to the admissionregistration.k8s.io/v1beta1 API group in Kubernetes 1.9. The former ExternalAdmissionHookConfiguration type has been replaced by the incompatible ValidatingWebhookConfiguration and MutatingWebhookConfiguration types. Moreover, the webhook admission payload type AdmissionReview in admission.k8s.io has been promoted to v1beta1. Note that versioned objects are now passed to webhooks. Refer to the admission webhook documentation for details.Validation for CustomResourcesIn Kubernetes 1.8 we introduced CustomResourceDefinitions (CRD) pre-persistence schema validation as an alpha feature. With 1.9, the feature got promoted to beta and will be enabled by default. As a client-go user, you will find the API types at k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.The OpenAPI v3 schema can be defined in the CRD spec as:apiVersion: apiextensions.k8s.io/v1beta1kind: CustomResourceDefinitionmetadata: …spec:  …  validation:    openAPIV3Schema:      properties:        spec:          properties:            version:                type: string                enum:                – “v1.0.0″                – “v1.0.1″            replicas:                type: integer                minimum: 1                maximum: 10The schema in the above CRD applies following validations for the instance:spec.version must be a string and must be either “v1.0.0” or “v1.0.1”.spec.replicas must be an integer and must have a minimum value of 1 and a maximum value of 10.A CustomResource with invalid values for spec.version (v1.0.2) and spec.replicas (15) will be rejected: apiVersion: mygroup.example.com/v1kind: Appmetadata:  name: example-appspec:  version: “v1.0.2″  replicas: 15 $ kubectl create -f app.yamlThe App “example-app” is invalid: []: Invalid value: map[string]interface {}{“apiVersion”:”mygroup.example.com/v1″, “kind”:”App”, “metadata”:map[string]interface {}{“creationTimestamp”:”2017-08-31T20:52:54Z”, “uid”:”5c674651-8e8e-11e7-86ad-f0761cb232d1″, “selfLink”:””, “clusterName”:””, “name”:”example-app”, “namespace”:”default”, “deletionTimestamp”:interface {}(nil), “deletionGracePeriodSeconds”:(*int64)(nil)}, “spec”:map[string]interface {}{“replicas”:15, “version”:”v1.0.2″}}:validation failure list:spec.replicas in body should be less than or equal to 10spec.version in body should be one of [v1.0.0 v1.0.1] Note that with Admission Webhooks, Kubernetes 1.9 provides another beta feature to validate objects before they are created or updated. Starting with 1.9, these webhooks also allow mutation of objects (for example, to set defaults or to inject values). Of course, webhooks work with CRDs as well. Moreover, webhooks can be used to implement validations that are not easily expressible with CRD validation. Note that webhooks are harder to implement than CRD validation, so for many purposes, CRD validation is the right tool.Creating namespaced informersOften objects in one namespace or only with certain labels are to be processed in a controller. Informers now allow you to tweak the ListOptions used to query the API server to list and watch objects. Uninitialized objects (for consumption by initializers) can be made visible by setting IncludeUnitialized to true. All this can be done using the new NewFilteredSharedInformerFactory constructor for shared informers:import “k8s.io/client-go/informers”…sharedInformers := informers.NewFilteredSharedInformerFactory( client, 30*time.Minute, “some-namespace”, func(opt *metav1.ListOptions) { opt.LabelSelector = “foo=bar” },)  Note that the corresponding lister will only know about the objects matching the namespace and the given ListOptions. Note that the same restrictions apply for a List or Watch call on a client.This production code example of a cert-manager demonstrates how namespace informers can be used in real code.Polymorphic scale clientHistorically, only types in the extensions API group would work with autogenerated Scale clients. Furthermore, different API groups use different Scale types for their /scale subresources. To remedy these issues, k8s.io/client-go/scale provides a polymorphic scale client to scale different resources in different API groups in a coherent way: import (apimeta “k8s.io/apimachinery/pkg/api/meta” discocache “k8s.io/client-go/discovery/cached” “k8s.io/client-go/discovery””k8s.io/client-go/dynamic”“k8s.io/client-go/scale”)…cachedDiscovery := discocache.NewMemCacheClient(client.Discovery())restMapper := discovery.NewDeferredDiscoveryRESTMapper(cachedDiscovery, apimeta.InterfacesForUnstructured,)scaleKindResolver := scale.NewDiscoveryScaleKindResolver(client.Discovery(),)scaleClient, err := scale.NewForConfig(client, restMapper,dynamic.LegacyAPIPathResolverFunc, scaleKindResolver,)scale, err := scaleClient.Scales(“default”).Get(groupResource, “foo”) The returned scale object is generic and is exposed as the autoscaling/v1.Scale object. It is backed by an internal Scale type, with conversions defined to and from all the special Scale types in the API groups supporting scaling. We planto extend this to CustomResources in 1.10.If you’re implementing support for the scale subresource, we recommend that you expose the autoscaling/v1.Scale object.Type-safe DeepCopyDeeply copying an object formerly required a call to Scheme.Copy(Object) with the notable disadvantage of losing type safety. A typical piece of code from client-go version 5 required type casting:newObj, err := runtime.NewScheme().Copy(node)if err != nil {    return fmt.Errorf(“failed to copy node %v: %s”, node, err)}newNode, ok := newObj.(*v1.Node)if !ok {    return fmt.Errorf(“failed to type-assert node %v”, newObj)} Thanks to k8s.io/code-generator, Copy has now been replaced by a type-safe DeepCopy method living on each object, allowing you to simplify code significantly both in terms of volume and API error surface:newNode := node.DeepCopy()No error handling is necessary: this call never fails. If and only if the node is nil does DeepCopy() return nil.To copy runtime.Objects there is an additional DeepCopyObject() method in the runtime.Object interface.With the old method gone for good, clients need to update their copy invocations accordingly.Code generation and CustomResourcesUsing client-go’s dynamic client to access CustomResources is discouraged and superseded by type-safe code using the generators in k8s.io/code-generator. Check out the Deep Dive on the Open Shift blog to learn about using code generation with client-go.Comment BlocksYou can now place tags in the comment block just above a type or function, or in the second block above. There is no distinction anymore between these two comment blocks. This used to a be a source of subtle errors when using the generators:// second block above// +k8s:some-tag// first block above// +k8s:another-tagtype Foo struct {}Custom Client MethodsYou can now use extended tag definitions to create custom verbs . This lets you expand beyond the verbs defined by HTTP. This opens the door to higher levels of customization.For example, this block leads to the generation of the method UpdateScale(s *autoscaling.Scale) (*autoscaling.Scale, error):// genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/kubernetes/pkg/apis/autoscaling.Scale,result=k8s.io/kubernetes/pkg/apis/autoscaling.ScaleResolving Golang Naming ConflictsIn more complex API groups it’s possible for Kinds, the group name, the Go package name, and the Go group alias name to conflict. This was not handled correctly prior to 1.9. The following tags resolve naming conflicts and make the generated code prettier:// +groupName=example2.example.com// +groupGoName=SecondExampleThese are usually in the doc.go file of an API package. The first is used as the CustomResource group name when RESTfully speaking to the API server using HTTP. The second is used in the generated Golang code (for example, in the clientset) to access the group version:clientset.SecondExampleV1()It’s finally possible to have dots in Go package names. In this section’s example, you would put the groupName snippet into the pkg/apis/example2.example.com directory of your project.Example projectsKubernetes 1.9 includes a number of example projects which can serve as a blueprint for your own projects:k8s.io/sample-apiserver is a simple user-provided API server that is integrated into a cluster via API aggregation.k8s.io/sample-controller is a full-featured controller (also called an operator) with shared informers and a workqueue to process created, changed or deleted objects. It is based on CustomResourceDefinitions and uses k8s.io/code-generator to generate deepcopy functions, typed clientsets, informers, and listers.VendoringIn order to update from the previous version 5 to version 6 of client-go, the library itself as well as certain third-party dependencies must be updated. Previously, this process had been tedious due to the fact that a lot of code got refactored or relocated within the existing package layout across releases. Fortunately, far less code had to move in the latest version, which should ease the upgrade procedure for most users.State of the published repositoriesIn the past k8s.io/client-go, k8s.io/api, and k8s.io/apimachinery were updated infrequently. Tags (for example, v4.0.0) were created quite some time after the Kubernetes releases. With the 1.9 release we resumed running a nightly bot that updates all the repositories for public consumption, even before manual tagging. This includes the branches:masterrelease-1.8 / release-5.0release-1.9 / release-6.0 Kubernetes tags (for example, v1.9.1-beta1) are also applied automatically to the published repositories, prefixed with kubernetes- (for example, kubernetes-1.9.1-beta1).These tags have limited test coverage, but can be used by early adopters of client-go and the other libraries. Moreover, they help to vendor the correct version of k8s.io/api and k8s.io/apimachinery. Note that we only create a v6.0.3-like semantic versioning tag on k8s.io/client-go. The corresponding tag for k8s.io/api and k8s.io/apimachinery is kubernetes-1.9.3.Also note that only these tags correspond to tested releases of Kubernetes. If you depend on the release branch, e.g., release-1.9, your client is running on unreleased Kubernetes code.State of vendoring of client-goIn general, the list of which dependencies to vendor is automatically generated and written to the file Godeps/Godeps.json. Only the revisions listed there are tested. This means especially that we do not and cannot test the code-base against master branches of our dependencies. This puts us in the following situation depending on the used vendoring tool:godep reads Godeps/Godeps.json by running godep restore from k8s.io/client-go in your GOPATH. Then use godep save to vendor in your project. godep will choose the correct versions from your GOPATH.glide reads Godeps/Godeps.json automatically from its dependencies including from k8s.io/client-go, both on init and on update. Hence, glide should be mostly automatic as long as there are no conflicts.dep does not currently respect Godeps/Godeps.json in a consistent way, especially not on updates. It is crucial to specify client-go dependencies manually as constraints or overrides, also for non k8s.io/* dependencies. Without those, dep simply chooses the dependency master branches, which can cause problems as they are updated frequently.The Kubernetes and golang/dep community are aware of the problems [issue #1124, issue #1236] and are working together on solutions. Until then special care must be taken.Please see client-go’s INSTALL.md for more details.Updating dependencies – golang/depEven with the deficiencies of golang/dep today, dep is slowly becoming the de-facto standard in the Go ecosystem. With the necessary care and the awareness of the missing features, dep can be (and is!) used successfully. Here’s a demonstration of how to update a project with client-go 5 to the latest version 6 using dep:(If you are still running client-go version 4 and want to play it safe by not skipping a release, now is a good time to check out this excellent blog post describing how to upgrade to version 5, put together by our friends at Heptio.)Before starting, it is important to understand that client-go depends on two other Kubernetes projects: k8s.io/apimachinery and k8s.io/api. In addition, if you are using CRDs, you probably also depend on k8s.io/apiextensions-apiserver for the CRD client. The first exposes lower-level API mechanics (such as schemes, serialization, and type conversion), the second holds API definitions, and the third provides APIs related to CustomResourceDefinitions. In order for client-go to operate correctly, it needs to have its companion libraries vendored in correspondingly matching versions. Each library repository provides a branch named release-<version> where <version> refers to a particular Kubernetes version; for client-go version 6, it is imperative to refer to the release-1.9 branch on each repository.Assuming the latest version 5 patch release of client-go being vendored through dep, the Gopkg.toml manifest file should look something like this (possibly using branches instead of versions):[[constraint]]  name = “k8s.io/api”  version = “kubernetes-1.8.1″[[constraint]]  name = “k8s.io/apimachinery”  version = “kubernetes-1.8.1″[[constraint]]  name = “k8s.io/apiextensions-apiserver”  version = “kubernetes-1.8.1″[[constraint]]  name = “k8s.io/client-go”  version = “5.0.1”Note that some of the libraries could be missing if they are not actually needed by the client.Upgrading to client-go version 6 means bumping the version and tag identifiers as following (emphasis given):[constraint]]  name = “k8s.io/api”  version = “kubernetes-1.9.0″[[constraint]]  name = “k8s.io/apimachinery”  version = “kubernetes-1.9.0″[[constraint]]  name = “k8s.io/apiextensions-apiserver”  version = “kubernetes-1.9.0″[[constraint]]  name = “k8s.io/client-go”  version = “6.0.0”The result of the upgrade can be found here.A note of caution: dep cannot capture the complete set of dependencies in a reliable and reproducible fashion as described above. This means that for a 100% future-proof project you have to add constraints (or even overrides) to many other packages listed in client-go’s Godeps/Godeps.json. Be prepared to add them if something breaks. We are working with the golang/dep community to make this an easier and more smooth experience.Finally, we need to tell dep to upgrade to the specified versions by executing dep ensure. If everything goes well, the output of the command invocation should be empty, with the only indication that it was successful being a number of updated files inside the vendor folder.If you are using CRDs, you probably also use code-generation. The following block for Gopkg.toml will add the required code-generation packages to your project:required = [  “k8s.io/code-generator/cmd/client-gen”,  “k8s.io/code-generator/cmd/conversion-gen”,  “k8s.io/code-generator/cmd/deepcopy-gen”,  “k8s.io/code-generator/cmd/defaulter-gen”,  “k8s.io/code-generator/cmd/informer-gen”,  “k8s.io/code-generator/cmd/lister-gen”,][[constraint]]  branch = “kubernetes-1.9.0″  name = “k8s.io/code-generator” Whether you would also like to prune unneeded packages (such as test files) through dep or commit the changes into the VCS at this point is up to you — but from an upgrade perspective, you should now be ready to harness all the fancy new features that Kubernetes 1.9 brings through client-go.
Quelle: kubernetes

How The Alt Right — And Paul Ryan's Challenger — Coordinate To Fight The "Jewish Media"

When Steve Bannon, Breitbart and other conservatives cut ties with far right activist and congressional candidate Paul Nehlen, he turned to his private Twitter direct message group, CityRevoltVoteNehlen. Nehlen was facing criticism for a handful of alt right provocations, among them a string of incendiary tweets with the white nationalist hashtag “#ItsOkayToBeWhite” and his touting of “The Culture of Critique,” a book written by the director of a white supremacist political party and denounced by the ADL as anti-Semitic.

“There are a list of goys attacking me, and a separate list of Jews,” Nehlen messaged the group, according to screenshots viewed by BuzzFeed News.

According to two individuals with knowledge of the group, such requests were common from Nehlen, who frequented the group to solicit its help with trolling his critics and political opponents.

“It’s pretty obviously coordinated,” Nehlen continued, referring to remarks from conservative and pro-Trump personalities like Town Hall’s Kurt Schlichter and The Rebel’s John Cardillo who’d denounced his tweets. “Cardillo and others like him are working for Jewish media then there are the fake conservatives who happen to be jewish,” he wrote to the group telling members to add Schlichter to his list. “Im going to decimate them all and y’[all are gonna help me.”

Group members responded to his rallying cry, offering support with a volley of fist, thumbs up, and American flag emojis. “Yes we will,” one replied.

Nehlen, a Wisconsin businessman who unsuccessfully challenged House Speaker Paul Ryan for his congressional seat in 2016 (and is running again in 2018), has faced criticism in recent months for his anti-immigrant views and controversial conduct. Even Nehlen’s most ardent media backers were forced to sever ties. On December 27th, Steve Bannon and Breitbart, who had championed Nehlen’s 2016 primary campaign against Ryan, disavowed him, purging his articles from its site. “Nehlen is dead to us,” Bannon advisor Arthur Schwartz told CNN.

Nehlen, for his part, has largely ignored questions about his anti-semitic views and white nationalism, dismissing any inquiries as attempts to derail his commitment to an “America First” agenda. But screenshots reviewed by BuzzFeed News show Nehlen associating with and soliciting help from people who appear to be prominent members of the alt-right to wage trolling and harassment campaigns.

Nehlen and other members of these groups declined to speak with Buzzfeed News.

“There were all kinds of troll accounts in the group making memes for Paul to use,” one person with knowledge of the group told BuzzFeed News, noting that many of the accounts that made memes for Nehlen quickly left the group after posting them. “Paul had a backup account and he'd put smear info on the backup account and ask random people in the group to tweet it out and they'd tweet it out from there,” the individual claimed.

Among the members of the group appear to be the pseudonymous Jazzhands McFeels, one of the hosts of an alt-right podcast called Fash The Nation (on which Nehlen has appeared multiple times) and Eli Mosley, a leader of the white nationalist group Identity Evropa and a leading voice of the alt right. A Richard Spencer acolyte, Mosley is perhaps best known for helping fellow white nationalist Jason Kessler organize the “Unite the Right” rally in Charlottesville last August that resulted in the death of a counterprotestor.

Screenshots show that shortly after joining the group an account with Mosley's name and avatar enlisted its members to harass Nehlen’s enemies on Twitter, including former Red Sox pitcher and Breitbart Radio host Curt Schilling. On the 29th of December Schilling invited Nehlen on his radio show to discuss his controversial remarks, but withdrew the invitation a day later, telling his followers he did not want to give Nehlen a platform for his views.

“Let’s get really offensive against Curt shilling and anyone who attacks Paul,” Mosley wrote to the group on the December 30th. “Make sure they understand that people don’t like when they attack their own.” Mosley did not immediately respond to an email request for comment.

Around the time of Mosley’s call to action, Schilling was bombarded on Twitter by Nehlen supporters attacking him for the reversal. Echoing Nehlen’s combative attitude toward “Jewish media,” Nehlen supporters accused Schilling of being a “paid Jewish shill.”

Other Nehlen supporters photoshopped crude images using derogatory cartoons of Jews including one cartoon of a figure with the Breitbart logo for a face fellating a man whose face was replaced by the Israeli flag. Many of Nehlen’s trolls adopted the moniker “Schilling for Sheckles” — an insult first tweeted by Nehlen himself.

The screenshots reviewed by BuzzFeed News offer a glimpse into the world of coordinated harassment campaigns on Twitter by troll armies. According to one former member of the group, CityRevoltVoteNehlen was one of numerous DM groups Nehlen used to coordinate messaging campaigns with supporters.

“Everyone uses these private DM groups, it seems,” one former Nehlen DM group member said. Indeed, screenshots appear to show some users claiming participation in dozens of direct message groups. “A lot of the time it’s how the #MAGA sausage gets made,” another pro-Trump media personality told BuzzFeed News referring to the use of DM groups.

One pro-Trump Twitter personality who told BuzzFeed News they’d been invited to a number of similar groups said that the groups are mostly used by unknown accounts looking to grow their followings. “Most of these the groups are just people who’re thirsty for retweets. But they’re not worth the trouble in my opinion — in these big open chats all it takes is one person to bring it all down. In some of them the things people say are really stupid,” they said.

Whether its harmless gossip, sharing articles, retweet schemes, or coordinated harassment campaigns, the groups suggest that underneath Twitter's chaotic political discourse a second, equally important conversation is taking place.

Quelle: <a href="How The Alt Right — And Paul Ryan's Challenger — Coordinate To Fight The "Jewish Media"“>BuzzFeed