Skip to content

Commit

Permalink
Fix broken layout of kubernetes id concepts (#13972)
Browse files Browse the repository at this point in the history
* Fix broken layout of kubernetes id concepts

* Add search and sitemap to root directory of docs

* Fix minor typo
  • Loading branch information
girikuncoro authored and k8s-ci-robot committed Apr 23, 2019
1 parent d831aa2 commit a1af880
Show file tree
Hide file tree
Showing 5 changed files with 227 additions and 0 deletions.
108 changes: 108 additions & 0 deletions content/id/docs/concepts/_index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
---
title: Konsep
main_menu: true
content_template: templates/concept
weight: 40
---

{{% capture overview %}}

Bagian konsep ini membantu kamu belajar tentang bagian-bagian sistem serta abstraksi
yang digunakan Kubernetes untuk merepresentasikan kluster kamu, serta membantu
kamu belajar lebih dalam bagaimana cara kerja Kubernetes.

{{% /capture %}}

{{% capture body %}}

## Ikhtisar

Untuk menggunakan Kubernetes, kamu menggunakan obyek-obyek *Kubernetes API* untuk merepresentasikan
*state* yang diinginkan: apa yang aplikasi atau *workload* lain yang ingin kamu
jalankan, *image* kontainer yang digunakan, jaringan atau *resource disk* apa yang ingin
kamu sediakan, dan lain sebagainya. Kamu membuat *state* yang diinginkan dengan cara membuat
obyek dengan menggunakan API Kubernetes, dan biasanya menggunakan `command-line interface`, yaitu `kubectl`.
Kamu juga dapat secara langsung berinteraksi dengan kluster untuk membuat atau mengubah
*state* yang kamu inginkan.

Setelah kamu membuat *state* yang kamu inginkan, *Control Plane* Kubernetes
menggunakan `Pod Lifecycle Event Generator (PLEG)` untuk mengubah
*state* yang ada saat ini supaya sama dengan *state* yang diinginkan.
Untuk melakukan hal tersebut, Kubernetes melakukan berbagai *task* secara otomatis,
misalnya dengan mekanisme `start` atau `stop` kontainer, melakukan *scale* replika dari
suatu aplikasi, dan lain sebagainya. *Control Plane* Kubernetes terdiri dari sekumpulan
`process` yang dijalankan di kluster:

* **Kubernetes Master** terdiri dari tiga buah *process* yang dijalankan pada sebuah *node* di kluster kamu, *node* ini disebut sebagai *master*, yang terdiri [kube-apiserver](/docs/admin/kube-apiserver/), [kube-controller-manager](/docs/admin/kube-controller-manager/) dan [kube-scheduler](/docs/admin/kube-scheduler/).
* Setiap *node* non-master pada kluster kamu menjalankan dua buah *process*:
* **[kubelet](/docs/admin/kubelet/)**, yang menjadi perantara komunikasi dengan *master*.
* **[kube-proxy](/docs/admin/kube-proxy/)**, sebuah *proxy* yang merupakan representasi jaringan yang ada pada setiap *node*.

## Obyek Kubernetes

Kubernetes memiliki beberapa abstraksi yang merepresentasikan *state* dari sistem kamu:
apa yang aplikasi atau *workload* lain yang ingin kamu jalankan, jaringan atau *resource disk* apa yang ingin
kamu sediakan, serta beberapa informasi lain terkait apa yang sedang kluster kamu lakukan.
Abstraksi ini direpresentasikan oleh obyek yang tersedia di API Kubernetes;
lihat [ikhtisar obyek-obyek Kubernetes](/docs/concepts/abstractions/overview/)
untuk penjelasan yang lebih mendetail.

Obyek mendasar Kubernetes termasuk:

* [Pod](/docs/concepts/workloads/pods/pod-overview/)
* [Service](/docs/concepts/services-networking/service/)
* [Volume](/docs/concepts/storage/volumes/)
* [Namespace](/docs/concepts/overview/working-with-objects/namespaces/)

Sebagai tambahan, Kubernetes memiliki beberapa abstraksi yang lebih tinggi yang disebut kontroler.
Kontroler merupakan obyek mendasar dengan fungsi tambahan, contoh dari kontroler ini adalah:

* [ReplicaSet](/docs/concepts/workloads/controllers/replicaset/)
* [Deployment](/docs/concepts/workloads/controllers/deployment/)
* [StatefulSet](/docs/concepts/workloads/controllers/statefulset/)
* [DaemonSet](/docs/concepts/workloads/controllers/daemonset/)
* [Job](/docs/concepts/workloads/controllers/jobs-run-to-completion/)

## *Control Plane* Kubernetes

Berbagai bagian *Control Plane* Kubernetes, seperti *master* dan *process-process* kubelet,
mengatur bagaimana Kubernetes berkomunikasi dengan kluster kamu. *Control Plane*
menjaga seluruh *record* dari obyek Kubernetes serta terus menjalankan
iterasi untuk melakukan manajemen *state* obyek. *Control Plane* akan memberikan respon
apabila terdapat perubahan pada kluster kamu dan mengubah *state* saat ini agar sesuai
dengan *state* yang diinginkan.

Contohnya, ketika kamu menggunakan API Kubernetes untuk membuat sebuah *Deployment*,
kamu memberikan sebuah *state* baru yang harus dipenuhi oleh sistem. *Control Plane*
kemudian akan mencatat obyek apa saja yang dibuat, serta menjalankan instruksi yang kamu berikan
dengan cara melakukan `start` aplikasi dan melakukan `scheduling` aplikasi tersebut
pada *node*, dengan kata lain mengubah *state* saat ini agar sesuai dengan *state* yang diinginkan.

### Master

Master Kubernetes bertanggung jawab untuk memelihara *state* yang diinginkan pada kluster kamu.
Ketika kamu berinteraksi dengan Kubernetes, misalnya saja menggunakan perangkat `kubectl`,
kamu berkomunikasi dengan *master* kluster Kubernetes kamu.

> "master" merujuk pada tiga buah *process* yang dijalankan pada sebuah *node* pada kluster kamu, *node* ini disebut sebagai *master*, yang terdiri [kube-apiserver](/docs/admin/kube-apiserver/), [kube-controller-manager](/docs/admin/kube-controller-manager/) dan [kube-scheduler](/docs/admin/kube-scheduler/).
### Node

*Node* di dalam kluster Kubernetes adalah mesin (mesin virtual maupun fisik) yang
menjalankan aplikasi kamu. Master mengontrol setiap node; kamu akan jarang berinteraksi
dengan *node* secara langsung.

#### Metadata obyek


* [Anotasi](/docs/concepts/overview/working-with-objects/annotations/)

{{% /capture %}}

{{% capture whatsnext %}}

Jika kamu ingin menulis halaman konsep, perhatikan
[cara penggunaan template pada laman](/docs/home/contribute/page-templates/)
untuk informasi mengenai konsep tipe halaman dan *template* konsep.

{{% /capture %}}
5 changes: 5 additions & 0 deletions content/id/docs/search.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
layout: search
title: Hasil Pencarian
---

114 changes: 114 additions & 0 deletions content/id/docs/sitemap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
---
---
<script language="JavaScript">
var dropDownsPopulated = false;
$( document ).ready(function() {
// When the document loads, get the metadata JSON, and kick off tbl render
$.get("/metadata.txt", function(data, status) {
metadata = $.parseJSON(data);
metadata.pages.sort(dynamicSort("t"));
mainLogic()
$(window).bind( 'hashchange', function(e) {
mainLogic();
});
});
});
function mainLogic()
{
// If there's a tag filter, change the table/drop down output
if (!dropDownsPopulated) populateDropdowns();
var tag=window.location.hash.replace("#","");
if(tag) {
tag = $.trim(tag);
for (i=0;i<tagName.length;i++) {
querystringTag = tagName[i] + "=";
if (tag.indexOf(querystringTag) > -1)
{
console.log("in mainLog: querystringTag of " + querystringTag + " matches tag of " + tag);
tag = tag.replace(querystringTag,"");
selectDropDown(tagName[i],tag);
topicsFilter(tagName[i],tag,"output");
}
}
} else {
currentTopics = metadata.pages;
}
renderTable(currentTopics,"output");

}
function populateDropdowns()
{
// Keeping mainLogic() brief by functionalizing the initialization of the
// drop-down filter boxes

for(i=0;i<metadata.pages.length;i++)
{
var metadataArrays = [metadata.pages[i].cr,metadata.pages[i].or,metadata.pages[i].mr];
for(j=0;j<metadataArrays.length;j++)
{
if (metadataArrays[j]) {
for (k=0;k<metadataArrays[j].length;k++) {
if (typeof storedTagsArrays[j] == 'undefined') storedTagsArrays[j] = new Array();
storedTagsArrays[j][metadataArrays[j][k][tagName[j]]] = true;
// ^ conceptList[metadata.pages[i].cr[k].concept] = true; (if rolling through concepts)
// ^ conceptList['container'] = true; (ultimate result)
// ^ objectList[metadata.pages[i].or[k].object] = true; (if rolling through objects)
// ^ objectList['restartPolicy'] = true; (ultimate result)
}
}
}
}
var output = new Array();
for(i=0;i<tagName.length;i++)
{
// Phew! All tags in conceptList, objectList, and commandList!
// Loop through them and populate those drop-downs through html() injection
output = [];
output.push("<select id='" + tagName[i] + "' onchange='dropFilter(this)'>");
output.push("<option>---</option>");
Object.keys(storedTagsArrays[i]).sort().forEach(function (key) {
output.push("<option>" + key + "</option>");
});
output.push("</select>")
$(dropDowns[i]).html(output.join(""));
}
dropDownsPopulated = true;
}
function dropFilter(srcobj)
{
// process the change of a drop-down value
// the ID of the drop down is either command, object, or concept
// these exact values are what topicsFilter() expects, plus a filter val
// which we get from .text() of :selected
console.log("dropFilter:" + $(srcobj).attr('id') + ":" + $(srcobj).find(":selected").text());
topicsFilter($(srcobj).attr('id').replace("#",""),$(srcobj).find(":selected").text(),"output");
for(i=0;i<tagName.length;i++)
{
if($(srcobj).attr('id')!=tagName[i]) selectDropDown(tagName[i],"---");
}
}
function selectDropDown(type,tag)
{
// change drop-down selection w/o filtering
$("#" + type).val(tag);
}
</script>
<style>
#filters select{
font-size: 14px;
border: 1px #000 solid;
}
#filters {
padding-top: 20px;
}
</style>

Pilih <i>tag</i> atau gunakan <i>drop down</i> untuk melakukan filter. Pilih <i>header</i> pada tabel untuk mengurutkan.

<p id="filters">
Filter berdasarkan Konsep: <span id="conceptFilter" /><br/>
Filter berdasarkan Obyek: <span id="objectFilter" /><br/>
Filter berdasarkan Perintah: <span id="commandFilter" />
</p>

<div id="output" />

0 comments on commit a1af880

Please sign in to comment.