All posts by Stefan Zosel

AWARD: Readers choice award for BIG Data cloud management & brokerage – Cloud Computing Inside

20th. October 2017

 – Readers Choice Award

34.000 voters from CloudComputing Insider voted best BIG Data solutions and services. T-Systems BIG Data is proud to be awarded for BIG Data Consulting in category: “Cloud Management & Brokerage”

Users from the websites: BigData-Insider, CloudComputing-Insider, DataCenter-Insider, IP-Insider, Security-Insider und Storage-Insider where asked last 4 months to nominate candidates in 42 categories. T-Systems BIG Data made the race in category “Cloud Management and Brokerage”.

This new award confirms our Cloud strategy and rewards the effort to constantly evolve our offerings. It is great, that our strength and strategy are so clearly seen in the market.

AppAgile PaaS selected as Leader in Germany for aPaaS 2017

ISG analyzed german Cloud Market and selected AppAgile as leader for aPaaS market

isg-apaas-leader-2017

Key values from AppAgile:

  • Deutsche Telekom (TDG + TSI) strongly addresses the issue of security: Managed admin access, separate sandbox environments, Azure in a German cloud and operation are possible and many certifications are available. The 24×7 support completes the offer.
  • The new approach is a hybrid cloud based on Microsoft Azure and the Red Hat OpenShift container platform. The Managed AppAgile Platform also simplifies development based on Cloud Foundry & OpenShift.
  • Healthcare, retail and M2M industry alignments are integrated into AppAgile as add-ons. The documentation for compatible database and middleware systems is exemplary. 
  • Deutsche Telekom (TDG + TSI) offers a high price transparency, which helps the customer to keep an overview of the costs. The offer will be successively expanded by the unit for the middle class (TDG).

Advisor statement:

"With AppAgile, Deutsche Telekom (TDG + TSI) offers a solution tailored to the German market, addressing SMEs and major customers."

isg-apaas-leader-2017-quadrant

If you like to get more details from that study, contact @zosel on this platform.

AppAgile Hybrid on Azure is Microsoft Partner of the Year 2017 Finalist!

We are happy to announce, that Microsoft has choosen AppAgile Hybrid on Azure for the Partner of the year award:

ms-award-2017

Microsoft received 2.800 nominations from 115 countries in over 30 categories – and we are very proud that we got recognized with our offering.

Albert Kroisleitner – Practise Lead for AppAgile Hybrid on Azure – will join Microsofts Inspire in Washington D.C. early July to celebrate that success.

Join us on AppAgile and try out our openshift platform on top of Azure. We already got first customers which running production environments within Azure – on Azure German Cloud as well as international regions.

 

Press Release Microsoft:

 

For Release 10 a.m. PDT, June 1, 2017

Microsoft announces 2017 Partner of the Year winners and finalists
Partners recognized for outstanding solutions built on Microsoft technology.

REDMOND, Wash. — June 1, 2017 — Microsoft Corp. on Thursday announced the winners and finalists of the Microsoft 2017 Partner of the Year Awards. The annual awards recognize top Microsoft partners demonstrating excellence in innovation and implementation of customer solutions based on Microsoft technology. Award winners and finalists from around the world will be recognized at Microsoft Inspire taking place July 9–13, 2017, in Washington, D.C.
This year, Microsoft acknowledged partners in 34 categories celebrating each of the core partner competencies, including cloud technology, public sector, Microsoft philanthropies and many more. The award finalists and winners were selected from more than 2,800 nominations collected from 115 different countries worldwide based on their commitment to customers, their solution’s impact on the market and exemplary use of Microsoft technologies.
“The 2017 Partner of the Year Award winners and finalists represent the most valued and innovative solutions within our partner community,” said Ron Huddleston corporate vice president, One Commercial Partner, Microsoft Corp. “It’s an honor to recognize our top partners providing their expertise and solutions to solve complex business challenges. Congratulations to each winner and finalist on this tremendous achievement.”
Categories, winners and finalists appear below. A complete list, including the Microsoft Country Partner of the Year Award winners for 2017, is available at https://partner.microsoft.com/en-us/inspire/awards.

(…)
Open Source on Azure Partner of the Year
• Winner: Cardinal Solutions Group
• Finalist: Aztek
• Finalist: G&S Gestión y Sistemas SAC
• Finalist: T-Systems International

(…)

About Microsoft Inspire

Microsoft Inspire provides Microsoft’s partner community with access to key marketing and business strategies, leadership, and information regarding specific customer solutions designed to help partners succeed in the marketplace. Along with informative learning opportunities covering sales, marketing, services and technology, Microsoft Inspire is an ideal setting for partners to garner valuable knowledge from their peers and from Microsoft. More information can be found at https://partner.microsoft.com/en-us/inspire.

About Microsoft

Microsoft (Nasdaq “MSFT” @microsoft) is the leading platform and productivity company for the mobile-first, cloud-first world, and its mission is to empower every person and every organization on the planet to achieve more.
For more information, press only:
Microsoft Media Relations, WE Communications, (425) 638-7777
rrt@we-worldwide.com Note to editors: For more information, news and perspectives from Microsoft, please visit the Microsoft News Center at http://news.microsoft.com. Web links, telephone numbers and titles were correct at time of publication, but may have changed. For additional assistance, journalists
and analysts may contact Microsoft’s Rapid Response Team or other appropriate contacts listed at http://news.microsoft.com/microsoft-public-relations-contacts.

Data Science Workstation – on OpenShift

We deployed RStudio Server, R Shiny Server, Jupyter Notebook, Tensorflow and more on our Openshift environment, consuming Hadoop from within Openshift containers.

rstudiohadoop

We are combining that to our new service called “Data Science Workstation”. We are looking for early adaptors to finalize the service.

If you are interested – contact us: appagile @ telekom.de or via twitter.

How does it work?

We provide different data-platforms (check container repository). With the Data Science Workstation we assure compatibility between Data Science Tools and different Data Platforms. Additionaly we provide technology support to provide further Data Science Services, Data Feeds and fancy analytic libraries.

What do we have today?

  • Hue
  • R Shiny Server
  • RStudio Server
  • Jupyter Notebook
  • Tensorflow (including TensorBoard)
  • more to come – join our community to discuss with us.

How-To – Use kubernetes/openshift watch parameter in REST interface

Some api or oapi calls support the watch parameter

E.G: https://docs.openshift.com/enterprise/3.1/rest_api/openshift_v1.html#list-or-watch-objects-of-kind-route

list or watch objects of kind Route

GET /oapi/v1/namespaces/{namespace}/routes

Parameters

Type
Name
Description
Required
Schema
Default

QueryParameter

pretty

If ‘true’, then the output is pretty printed.

false

string

QueryParameter

labelSelector

A selector to restrict the list of returned objects by their labels. Defaults to everything.

false

string

QueryParameter

fieldSelector

A selector to restrict the list of returned objects by their fields. Defaults to everything.

false

string

QueryParameter

watch

Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.

false

boolean

QueryParameter

resourceVersion

When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history.

false

string

Let’s check this route

$ oc get route helloworld-route
NAME               HOST/PORT                                           PATH      SERVICE      LABELS           INSECURE POLICY   TLS TERMINATION
helloworld-route   spring-boot-helloworld.plainjava.appad4.tsi-af.de             helloworld   app=helloworld                    

 

So as an user for this project/namespace with the necessary rights you’ll get the existing route objects by:

$ curl -k -H "Authorization: Bearer $(oc whoami -t)" -X GET "https://172.30.0.1/oapi/v1/namespaces/plainjava/routes/helloworld-route"
{
  "kind": "Route",
  "apiVersion": "v1",
  "metadata": {
    "name": "helloworld-route",
    "namespace": "plainjava",
    "selfLink": "/oapi/v1/namespaces/plainjava/routes/helloworld-route",
    "uid": "480cbb83-4e5c-11e6-885c-0050560461a7",
    "resourceVersion": "11567709",
    "creationTimestamp": "2016-07-20T09:28:13Z",
    "labels": {
      "app": "helloworld"
    }
  },
  "spec": {
    "host": "spring-boot-helloworld.plainjava.appad4.tsi-af.de",
    "to": {
      "kind": "Service",
      "name": "helloworld"
    },
    "port": {
      "targetPort": 8080
    }
  },
  "status": {}
}

 

Now, Setting a watch and modifying the host of the route and change it back again. Check the modification message for the host.:

{"type":"ADDED","object":{"kind":"Route","apiVersion":"v1","metadata":{"name":"helloworld-route","namespace":"plainjava","selfLink":"/oapi/v1/namespaces/plainjava/routes/helloworld-route","uid":"480cbb83-4e5c-11e6-885c-0050560461a7","resourceVersion":"11567709","creationTimestamp":"2016-07-20T09:28:13Z","labels":{"app":"helloworld"}},"spec":{"host":"spring-boot-helloworld.plainjava.appad4.tsi-af.de","to":{"kind":"Service","name":"helloworld"},"port":{"targetPort":8080}},"status":{}}}
{"type":"MODIFIED","object":{"kind":"Route","apiVersion":"v1","metadata":{"name":"helloworld-route","namespace":"plainjava","selfLink":"/oapi/v1/namespaces/plainjava/routes/helloworld-route","uid":"480cbb83-4e5c-11e6-885c-0050560461a7","resourceVersion":"14600520","creationTimestamp":"2016-07-20T09:28:13Z","labels":{"app":"helloworld"}},"spec":{"host":"spring-boot-helloworld-1.plainjava.appad4.tsi-af.de","to":{"kind":"Service","name":"helloworld"},"port":{"targetPort":8080}},"status":{}}}
{"type":"MODIFIED","object":{"kind":"Route","apiVersion":"v1","metadata":{"name":"helloworld-route","namespace":"plainjava","selfLink":"/oapi/v1/namespaces/plainjava/routes/helloworld-route","uid":"480cbb83-4e5c-11e6-885c-0050560461a7","resourceVersion":"14600675","creationTimestamp":"2016-07-20T09:28:13Z","labels":{"app":"helloworld"}},"spec":{"host":"spring-boot-helloworld.plainjava.appad4.tsi-af.de","to":{"kind":"Service","name":"helloworld"},"port":{"targetPort":8080}},"status":{}}}

How-To Use supervisord in Docker Images

Supervisord is “a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.”

  • To install in your Dockefile get it from the epel repository – you have to enable epel first, of course.
    FROM rhel7
    ...
    yum install -y --enablerepo=epel supervisor
  • Config is in /etc/supervisord.conf
    You have to set “nodaemon=true”, so that supervisord will start in foreground

    [supervisord]
    nodaemon=true
    ...
  • Important is, that unix signals are passed to supervisord, so that there’ll be no zombies in case of deletion of the container
    • Find this blog post about signals in docker containers
    • Supervisord will handle it’s subprocesses according to the signals it gets. So it is important, that it runs as PID 1 in the container and is not started by a shell.
      • So verify, that supervisord is started in the exec format
    • If you manage a shell script with supervisord, ensure, that you catch relevant signals within you script and proceed accordingly
      ...
      function clean_up {
              # Perform program cleanup
              ...
              exit 0
      }
      trap clean_up SIGHUP SIGINT SIGTERM
  • If you want to manage a daemon process with your supervisord, you have to ensure, that it runs in the foreground – most daemon start commands are supporting this. Otherwise, you could use this script. See this post.
    #! /usr/bin/env bash
    set -eu
    pidfile="/var/run/your-daemon.pid"
    command=/usr/sbin/your-daemon
    # Proxy signals
    function kill_app(){
        kill $(cat $pidfile)
        exit 0 # exit okay
    }
    trap "kill_app" SIGINT SIGTERM
    # Launch daemon
    exec $command
    sleep 2
    # Loop while the pidfile and the process exist
    while [ -f $pidfile ] && kill -0 $(cat $pidfile) ; do
        sleep 0.5
    done
    exit 1000 # exit unexpected

    “kill -0” doesn’t send any kill signals, it only checks, if the permissions are sufficient to kill the process.

  • Don’t use “sleep inf” or “tail -f /dev/null” at the end of your scripts in order to block its ending. They won’t pass unix signals. Instead as described above, use a loop with a short sleep
  • Also important to mention is that the default behaviour of supervisord is to NOT restart programs when they finish with an exit code of “0”.
    • So ensure, that in case of crashes, your programs, daemons etc. are exiting with a non-0 state, so that supervisord knows that it should have to restart them
  • Supervisord will not end, when all programs have been finished. So even if all your programs have been exited with code 0, the supervisor process will run further on. If you want to have another behaviour, you have to implement an  event listener.
  • If supervisord is killed, it waits for the programs to be ended before it terminates
  • Here’s a test script I used for the investigations
    #!/bin/bash
    set -e
    echo "This program is running as PID $$ "
    function trap_with_arg() {
        func="$1" ; shift
        for sig ; do
            trap "$func $sig" "$sig"
        done
    }
    function clean_up {
        # Perform program exit
        echo Trapped: $1
        if [[ "$1" == "SIGTERM" ]] ; then
            exit 0
        else
            exit 1
        fi
    }
    trap_with_arg clean_up SIGHUP SIGINT SIGTERM
    while /bin/true ; do
        sleep 0.5
    done