How to build an easy to use cloud architecture [closed] - kubernetes

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed 7 months ago.
Improve this question
I'm a student and I'm supposed to set up a usable cluster for the university in the next semester. The main requirement is that other students can easily work with it. The cluster consists of 20 Linux PCs and 20 Macs. Other students should be able to quickly get applications like Kubernetes, Hadoop, etc. running with little configuration. At best deploy application, determine the node number and done (exaggerated). What is the best way to do this. I've skimmed over tools like Ansible and Terraform, they sound like something im looking for, but don't know anything about them.
Thanks a lot in advance!

Such questions are generally discouraged since they are not really questions but rather design problems but I'll answer anyway just to give you some idea.
Keep in mind that an architecture with 40 machines is not something easy to achieve for a beginner, so you should have a lot of patience and dedication when working on the project.
You are looking for a design type which is generally referred to as Infrastructure as a Service - IaaS. This allows tenants (the users of the cloud) to be able to deploy their own application/clusters on top of an existing infrastructure that you will provide. For this, you will have to start with something like openstack, which is one of the ways in which you can achieve this and you will have to do a lot of work to learn how it works, deploy it, and add your 40 machines to it. You can get started here. [I'm really unsure if you can use Mac systems as part of a cloud - but I'm really curious to know if it is possible]
Once you have setup an openstack infrastructure, you will have to think about maintenance and management of your system. There, you will have to think about solutions like ansible and terraform that will allow you to provide easy to use templates to you students where they will be able to edit some text files to match their specifications, and then deploy them on top of your openstack infrastructure easily. This practice is known as Infrastructure as Code - IaC. This helps you maintain your infrastructure designs as simple text files in a VCS (Version Control System) like Git for easier maintenance/rollback/upgrade etc.
The overall flow will look like this:
Student => Creates Manifests => Applies them to an Openstack account => Manages/Uses/Interacts with the deployed application
You => deploy Openstack => manage student accounts (tenant projects) => Monitor it => Maintain it => make sure it is available => Provide templates for deploying the 'overclouds'
There is no easy and simple answer to this very generic and complicated problem, but it is possible, for sure. I hope this gets you started.

Related

How to implement deployment freeze in kubernetes infrastructure? [closed]

Closed. This question is not about programming or software development. It is not currently accepting answers.
This question does not appear to be about a specific programming problem, a software algorithm, or software tools primarily used by programmers. If you believe the question would be on-topic on another Stack Exchange site, you can leave a comment to explain where the question may be able to be answered.
Closed last month.
Improve this question
Any big project is subject of code freeze in special moments of the year, mine included. In our context, we work with microservices architecture, where each team is responsable for the entire cycle coding->deploying, where deployment means changing a k8s deployment.yaml file that points to a new docker image with the latest changes.
However, the way we deal with freezes is that we simply don't merge any changes into the deployment.yaml of any of our services, this way, k8s won't deploy anything new. But IMO this approach is not ideal and easily bypassed because there isn't any real blocker, it's just a common agreement that we won't merge such PRs so that we don't change the deployment.yaml.
This way, my question would be if there is a known way, be that in kubernetes configurations or somewhere else, where I can enforce a real freeze and be 100% sure that nothing will be deployed in the meantime?
Even better if I were allowed to keep merging changes in deployment.yaml of my services, but only have the changes actually deployed upon freezing end.
-> In case you also don't know any existing way to do it, please leave your suggestions on how you think this could be done because Im heading to my final project in college and I think this could be an interesting topic...
The answer to this question will vary according to some parameters, but there are generally 2 main access points that can change production which should be controlled in order to achieve a hermetic code freeze -
CI/CD pipelines - This is the most common way to deploy changes to production these days. In my previous company, when we wanted to prevent developers from deploying changes during a code freeze, we would delete production credentials from the CI/CD system during the code freeze, and that way no change can be deployed even if it is merged to master.
As #larsks mentioned in the comments - if you are using GitOps, you might have to pin the current change to a specific commit/tag in git.
Manual changes - If developers in the organization have access to change production manually, you will have to address this as well. You can either block manual access until the end of the code freeze, or make sure the policy is clearly communicated to everyone with production access (since manual changes don't are less probable to happen unintentionally)
Another point to address when implementing code freeze is out of band access to apply hotfixes and other urgent changes. When cutting access to production there should still be an emergency route allowing changes to production to be applied, and it should be simple and quick - because it will often be applied in times of stress and downtime.

Kubernetes - Running the CI/CD pipeline on the prod cluster [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 1 year ago.
Improve this question
First of all, a disclaimer - I know that this questions might be too "open-ended" for SO, but I honestly could not find a better place for it (and the K8s docs specifically recommend any questions be directed to SO).
My company has decided to switch the main production infrastructure to Kubernetes. However, there is some significant pushback from the developers, who would prefer not to run the CI/CD pipeline on the same cluster as the production workloads. They prefer to keep some dedicated VMs for that purpose, the main reason given that "we should not put all our eggs in one basket".
With me coming from the other side of devops (the "ops" side), I would prefer to have everything in one place, managed using the same set of tools. Unfortunately, I cannot find any documented best practices stating one way or another.
So my questions are:
Based on personal experience, would you recommend one type of deployment over another? Why?
Can anyone point me to a link making the argument one way or another? Any recommendations that we should follow in such a case?
Unfortunately, I cannot find any documented best practices stating one way or another.
This is all depends on how strong separation you want. In Kubernetes you can separate environments by using a separate namespace, but for professional company environments, you typically want stronger separation. If you use a cloud provider, it is common to separate with a different account for "production", aslo with different access rights.
developers, who would prefer not to run the CI/CD pipeline on the same cluster as the production workloads.
If this is for a professional organization, I agree with them. You want to use completely separated VMs, network and load balancer. If you use a cloud provider, it is also good to use a different cloud account and vpc (virtual private cloud - network).
Recommendation
With me coming from the other side of devops (the "ops" side), I would prefer to have everything in one place, managed using the same set of tools.
I agree with both you and your developers. Use a dedicated cluster for production and a different cluster for development. Do all changes in the production cluster via CI/CD pipelines. Restrict access (at least, write access) to the production environment.
With that setup, you only have two clusters that are in active use, not more - but also strong separation for the production environment.
References
See Best practices for enterprise organizations for a good document on best practices for organizations.

What is the scope of learning kubernetes? [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 3 years ago.
Improve this question
I came across the word "Kubernetes" recently while searching for some online courses. I understood if I learn Kubernetes, I will learn about containers and stuff related to container orchestration and how easily we can scale the microservices. But I wanted to know after learning kubernetes is there any other thing to learn to become an expert in that line?
My question is more of the stream I can select if I learn this, as like learning Python or R will help you to become a data analyst or other data related stream?
I am very new this, really appreciate your help in understanding this
Thanks in advance
The main prerequisite for Kubernetes is Docker. Once you learn Docker, you learn how to package environments into containers and deploy them. Once you've learnt how to build docker images, you need to 'orchestrate' them. What does that mean?
That means, if you have a bunch of microservices (in the form of containers), you can spin up multiple machines and tell Kubernetes which image/container goes where and so you can orchestrate your app using Docker images (packaged environments) and then Kubernetes as the underlying resource provider to run these containers, and control when they are spun up/killed.
Assuming you don't have a massive cluster on-prem (or at home) Kubernetes on a single personal computer is rather useless. You would need to learn a cloud platform (or invest in a server) to utilise Kubernetes efficiently.
Once you learn this, you would possibly need to find a way for your containers to communicate with one another. In my opinion, the two most important things any amateur programmer needs to know are:
Message brokers
REST
Message brokers: Kafka, RabbitMQ (personal fave), Google Pub/Sub, etc.
REST: Basically sending/receiving data via HTTP requests.
Once all of this is done, you've learnt how to build images, orchestrate them, have them communicate with one another and use resources from other machines (utilizing the cloud or on-prem servers)
There are many other uses for Kubernetes, but in my opinion, this should be enough to entice you to learn this key-skill.
Kubernetes and Docker is the future, because it removes the need to worry about environments. If you have a docker image, you can run that image on Mac, Linux, Windows or basically any machine with a hypervisor. Increase portability, and decreases over-head of setting up environments each time. Also allows you to spin up 1 or 100 or 1000 or 10,000 containers (excellent for scalability!)
Yes, if you are looking to explore fully then security aspect can also be a thing you can learn and these days its in demand where various clients want to get security leaks checked at level of containers, containers registry and even at level of kubernetes also.
You can become DevSecOps with couple of certifications.
And pertaining to your later question I can't envisage anything because here you can just deploy containers and you can even deploy some python code there which is expected to collect some data from sensors and do some computations.
Please comment if something specific is your question

Game development with multiple people in Unity3D: How could we work on the same project simultaneously? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 7 years ago.
Improve this question
First of all, we're all beginners, so I am really sorry if this is a trivial question.
We're developing a game in Unity3D. We have two programmers, and one artist. We'd like to make our life easier by not just simply communicating via Facebook and sending our stuff back and forth. I know about GitHub, but I have a couple of problems with it.
It's not free for closed source projects - which would be ideal. Is there an alternative? Is this even the right kind of site to use?
Stupid reason, but I just can't comprehend how it works/how to use it. Is there an easy tutorial for it or something?
Is it even 'compatible' with Unity3D? Since I don't really know how
GitHub works, this might also be a really stupid question.
First of all you can use Bitbucket to host your stuff. Its like github without the open source community.I'm using it on a similar project I'm working on with some guys. It's important you understand that git is version control software developed by Linus Torvalds (creator of the Linux kernel). Git can be used to "commit" changes to a project. Then your other coder could grab those code(script in unity?) files and load them into him project. It is kind of overwhelming to learn to use at first, but it gets easy once you get it. Really learning to use git is one of the best things you can do for yourself.
As far as using git goes, I use linux so I can just 'man git' to look at commands and then use said commands in the shell. Mac uses bash so it probably is run right from the shell there too. Honestly I don't know at all for windows.
Here are a couple of resources:
https://try.github.io/levels/1/challenges/1
https://www.youtube.com/watch?v=TI3yVcSahzk
If I had more time I would look for a really good one for you, but I'm going to be late for work!
I have developed some Unity3D projects using GitHub before. So to answer question 3 and the last part of 1 first, yes Unity projects use a file-system architecture that is perfectly compatible with GitHub and once your used to it it is a great tool for team development.
Answer for question 1:
GitHub is just a name brand for a centralized version control system and there are other brands out there with similar offerings such as bit bucket. Google this term for more info. also look into distributed version control as well.
In all honesty though, if your new to developing, the product you will be making will most likely not be of much interest to other people on GitHub and your public repository will probably go unnoticed. If you believe that what you are creating is of such great value it needs to be kept secret, then investing a few dollars a month in a premium service is recommended anyway.
For other options, one would be to set up a central Git repository on a server (or one of your home computers) that you or one of you project mates is running. This might be a more complicated method but you would learn a lot of other useful things along the way.
Answer for question 2:
See -https://guides.github.com/activities/hello-world/- for github's intro tutorial. Also Youtube has some decent offering if you search for how to use Git Hub.
It can be a little daunting to work with something new and attempt to understand the documentation. If you are planning on getting serious about development though, especially in a corporate setting, you need to learn GIT and practice reading and understanding documentation.
Good Luck!
I recommend git for just about any text-based version control. If the files are binary heavy, it still works but it's not git's strength.
Until you get the central hosting worked out, you can use git bundle to share the changes offline.

What are the questions that needs to asked before choosing a CMS? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 9 years ago.
Improve this question
I want to choose a CMS that will be part of my infrastructure for my company websites.
What do you think are the questions I need to ask before I really choose one?
Choosing a CMS is almost like choosing a framework.
Thanks
Your two starting questions should be about people:
Who will be building and maintaining the technology? If your organisation's IT department is in love with Microsoft solutions, then find the best .NET CMS that meets your needs (Umbraco, Kentico, DotNetNuke etc). If you have no money but you're fairly IT-savvy and have a couple of Web designers on tap to help you out, then a designer-friendly free system like MODX Revolution makes sense. If some of your people have worked with a big system like Drupal, then that's your leading candidate.
Who will be adding content to the system? Internal users will want an interface that rewards use - it must react fast, protect the user from losing their work, make content easy to find, and ease tasks like creating new pages and including links and images. That might push you towards CMS Made Simple, or even WordPresss if your needs are otherwise modest. And if most of the content will be contributed by a user community, the CMS must support a strong forum capability.
After that, take a look at Step Two's document How to evaluate a content management system. These guys know their stuff. You may even want to buy their Content Management Requirements Toolkit. Their evaluation document gives you a starting point for your evaluation.
Do bear in mind, though, that not all requirements are created equal. For instance, many CMS texts stress the importance of complex workflow and versioning. In large publishing businesses, these sometimes matter a lot. In most smaller organisations they don't matter as much. Your workflow may consist of one person putting content into the system and another approving it to go live - the sort of task that can be accomplished with a staging server and email. Versioning may be adequately covered by a regular back-up.
And remember above all that when you put a CMS in an existing organisation, you're engaging in politics. You need to find out what people want, show you're delivering it, explain to them the considerations which they don't know about but which have to be taken into account, and convince them you're acting to bring them the best possible tool. Good luck.