Roadmap.sh: Everything You Need to Know About It
Roadmap.sh is an open-source guide for advanced web technologies. Both beginners and seasoned professionals can use this platform to grow their careers in tech. This post gives insight into the Roadmap.sh features and topics it covers. If you want complete information about this platform, read this guide. What is Roadmap.sh? Started by Kamran Ahmed in 2019, Roadmap.sh offers educational content and guides on various web technologies, such as JavaScript, React, Node.js, DevOps, and more. What makes it different from other platforms is that it provides easy-to-follow roadmaps for each course. It helps users track their progress. Features of Roadmap.sh Community-Driven One of the primary benefits of using Roadmap.sh is that it is a community-driven platform. Technology enthusiasts regularly update the content in their relevant technologies according to industry trends. Therefore, users get the latest content to study. As Roadmap.sh is an open-source platform, you learn the perspectives of multiple experts. Additionally, feedback and contributions from users continuously improve Roadmap.sh. Structured Learning Roadmap.sh presents all its roadmaps in a logical sequence. For each technology, you have a clear path to follow. You can begin your journey from basics to advanced without any confusion. Roadmap.sh interactive flowcharts let you navigate through different topics easily. Just click on a specific topic to learn more about it. Roadmaps for Various Fields Roadmap.sh has roadmaps for a diverse range of tech fields. Whether you want to be an expert in front-end development or back-end technologies, Roadmap.sh offers everything you need. You also get detailed visual guides for the following technologies. Frontend Development Backend Development Full Stack Development DevOps Engineer Android Developer iOS Developer Blockchain Developer QA Engineer Technology Specific Guides In addition to roadmaps, you get in-depth resources for top programming languages and frameworks. These include: Kubernetes Python React Node.js Docker System Design External Resources Roadmap.sh also provides links to external learning resources. You get access to tutorials and documentation. Professionals create these guides to supplement roadmaps. Supported by Artificial Intelligence Roadmap.sh leverages AI to automate the creation of roadmaps. As artificial intelligence suggests relevant resources for the roadmaps, it saves developers time and effort. Supports Contribution You can also contribute to the Roadmap.sh if you’re interested. Quick Overview of Popular Roadmaps in Roadmap.sh Front-End Development If you want to learn how to develop user interfaces and client-side applications, explore the front-end developer roadmap. It covers topics like HTML, JavaScript, and CSS. Apart from this, users can also learn advanced front-end frameworks, including Angular, React, and Vue.js. From fundamental web technologies to core programming languages, this roadmap has content on all the major topics. Back-end Development If you want to become proficient in server-side development, choose the back-end developer roadmap. It makes you familiar with the server-side aspect of web development. Moreover, you learn to manage the databases, server logic, and APIs. The back-end roadmap provides knowledge of coding languages like PHP, Java, Node.js, and Ruby. In addition to this, it also guides you on how to work with relational databases, such as MySQL/PostgreSQL and with NoSQL databases. DevOps Individuals who want to master DevOps must follow the DevOps roadmap. It has resources on operating systems and CI/CD pipelines. Additionally, you learn about containerization tools. Database Administrator (DBA) The DBA roadmap is designed for people who want to learn about relational and non-relational databases. You can learn about all major database management systems, including MySQL, PostgreSQL, Oracle, and MongoDB. The roadmap covers various topics related to database scaling, security, and backups. How to Use Roadmap.sh? Using Roadmap.sh is pretty simple. Visit the website and choose the roadmap you want to learn. Each roadmap features an easy-to-follow flowchart breaking down topics into steps. You can start your learning step-by-step, from basics to advanced. Conclusion Roadmap.sh is one of the best tools available for individuals who want to build a career in software development. Experienced software engineers can use this platform to enhance their knowledge and skills. You not only get expert insights from professionals but also learn about the latest industry trends. So use this platform to follow a clear path to success in the tech industry.
Ceph Persistent Storage for Kubernetes with Cephfs
Kubernetes is a prominent open-source orchestration platform. Individuals use it to deploy, manage, and scale applications. It is often challenging to manage stateful applications on this platform, especially those having heavy databases. Ceph is a robust distributed storage system that comes to the rescue. This open-source storage platform is known for its reliability, performance, and scalability. This blog post guides you on how to use Ceph persistent storage for Kubernetes with Cephfs. So let us learn the process step-by-step. Before we jump into the steps, you must have an external Ceph cluster. We assume you have a Ceph storage cluster deployed with Ceph Deploy or manually. Step 1: Deployment of Cephfs Provisioner on Kubernetes Deployment of Cephfs Provisioner on Kubernetes is a straightforward process. Simply log into your Kubernetes cluster and make a manifest file to deploy the RBD provisioner. It is an external dynamic provisioner that is compatible with Kubernetes 1.5+. vim cephfs-provisioner.yml Include the following content within the file. Remember, our deployment relies on RBAC (Role-Based Access Control). Therefore, we will establish the cluster role and bindings before making the service account and deploying the Cephs provisioner. — kind: Namespace apiVersion: v1 metadata: name: cephfs — kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: cephfs-provisioner namespace: cephfs rules: – apiGroups: [""] resources: ["persistentvolumes"] verbs: ["get", "list", "watch", "create", "delete"] – apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch", "update"] – apiGroups: ["storage.k8s.io"] resources: ["storageclasses"] verbs: ["get", "list", "watch"] – apiGroups: [""] resources: ["events"] verbs: ["create", "update", "patch"] – apiGroups: [""] resources: ["services"] resourceNames: ["kube-dns","coredns"] verbs: ["list", "get"] — kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: cephfs-provisioner namespace: cephfs subjects: – kind: ServiceAccount name: cephfs-provisioner namespace: cephfs roleRef: kind: ClusterRole name: cephfs-provisioner apiGroup: rbac.authorization.k8s.io — apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: cephfs-provisioner namespace: cephfs rules: – apiGroups: [""] resources: ["secrets"] verbs: ["create", "get", "delete"] – apiGroups: [""] resources: ["endpoints"] verbs: ["get", "list", "watch", "create", "update", "patch"] — apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: cephfs-provisioner namespace: cephfs roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: cephfs-provisioner subjects: – kind: ServiceAccount name: cephfs-provisioner — apiVersion: v1 kind: ServiceAccount metadata: name: cephfs-provisioner namespace: cephfs — apiVersion: apps/v1 kind: Deployment metadata: name: cephfs-provisioner namespace: cephfs spec: replicas: 1 selector: matchLabels: app: cephfs-provisioner strategy: type: Recreate template: metadata: labels: app: cephfs-provisioner spec: containers: – name: cephfs-provisioner image: "quay.io/external_storage/cephfs-provisioner:latest" env: – name: PROVISIONER_NAME value: ceph.com/cephfs – name: PROVISIONER_SECRET_NAMESPACE value: cephfs command: – "/usr/local/bin/cephfs-provisioner" args: – "-id=cephfs-provisioner-1" serviceAccount: cephfs-provisioner Next, apply the manifest. $ kubectl apply -f cephfs-provisioner.yml namespace/cephfs created clusterrole.rbac.authorization.k8s.io/cephfs-provisioner created clusterrolebinding.rbac.authorization.k8s.io/cephfs-provisioner created role.rbac.authorization.k8s.io/cephfs-provisioner created rolebinding.rbac.authorization.k8s.io/cephfs-provisioner created serviceaccount/cephfs-provisioner created deployment.apps/cephfs-provisioner created Make sure that the Cephfs volume provisioner pod is in the operational state. $ kubectl get pods -l app=cephfs-provisioner -n cephfs NAME READY STATUS RESTARTS AGE cephfs-provisioner-7b77478cb8-7nnxs 1/1 Running 0 84s Step 2: Obtain the Ceph Admin Key and Create a Secret on Kubernetes Access your Ceph cluster and retrieve the admin key to be used by the RBD provisioner. sudo ceph auth get-key client.admin Save the value of the admin user key displayed by the above command. Later, we will incorporate this key as a secret in Kubernetes. kubectl create secret generic ceph-admin-secret \ –from-literal=key='<key-value>' \ –namespace=cephfs Where <key-value> is your Ceph admin key. Verify the creation by using the following command. $ kubectl get secrets ceph-admin-secret -n cephfs NAME TYPE DATA AGE ceph-admin-secret Opaque 1 6s Step 3: Make Ceph Pools for Kubernetes and Client Key To run a Ceph file system, you will need at least two RADOS pools, one for data and another for metadata. Usually, the metadata pool contains only a few gigabytes of data. Generally, individuals use 64 or 128 for large clusters. Therefore, we recommend a small PG count. Now let us make Ceph OSD pools for Kubernetes: sudo ceph osd pool create cephfs_data 128 128 sudo ceph osd pool create cephfs_metadata 64 64 Create a Ceph file system on the pools. sudo ceph fs new cephfs cephfs_metadata cephfs_data Confirm Ceph File System Creation. $ sudo ceph fs ls name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ] UI Dashboard Confirmation Step 4: Make Cephfs Storage Class on Kubernetes A StorageClass serves as a means to define the “classes” of storage you offer in Kubernetes. Let’s create a storage class known as “Cephrfs.” vim cephfs-sc.yml Add the following content to the file: — kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: cephfs namespace: cephfs provisioner: ceph.com/cephfs parameters: monitors: 10.10.10.11:6789,10.10.10.12:6789,10.10.10.13:6789 adminId: admin adminSecretName: ceph-admin-secret adminSecretNamespace: cephfs claimRoot: /pvc-volumes Where: ⦁ Cephfs is the name of the StorageClass to be created. ⦁ 10.10.10.11, 10.10.10.12 & 10.10.10.13 are the IP addresses of Ceph Monitors. You can list them with the command: $ sudo ceph -s cluster: id: 7795990b-7c8c-43f4-b648-d284ef2a0aba health: HEALTH_OK services: mon: 3 daemons, quorum cephmon01,cephmon02,cephmon03 (age 32h) mgr: cephmon01(active, since 30h), standbys: cephmon02 mds: cephfs:1 {0=cephmon01=up:active} 1 up:standby osd: 9 osds: 9 up (since 32h), 9 in (since 32h) rgw: 3 daemons active (cephmon01, cephmon02, cephmon03) data: pools: 8 pools, 618 pgs objects: 250 objects, 76 KiB usage: 9.6 GiB used, 2.6 TiB / 2.6 TiB avail pgs: 618 active+clean Once you have updated the file with the accurate value of Ceph monitors, give the Kubectl command to make the StorageClass. $ kubectl apply -f cephfs-sc.yml storageclass.storage.k8s.io/cephfs created Next, list all the available storage classes: $ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE ceph-rbd ceph.com/rbd Delete Immediate false 25h cephfs ceph.com/cephfs Delete Immediate false 2m23s Step 5: Do Testing and Create Pod Create a test persistent volume claim to ensure that everything is smooth. $ vim cephfs-claim.yml — kind: PersistentVolumeClaim apiVersion: v1 metadata: name: cephfs-claim1 spec: accessModes: – ReadWriteOnce storageClassName: cephfs resources: requests: storage: 1Gi Apply manifest file $ kubectl apply -f cephfs-claim.yml persistentvolumeclaim/cephfs-claim1 created The successful binding will show the bound status. $ kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE ceph-rbd-claim1 Bound pvc-c6f4399d-43cf-4fc1-ba14-cc22f5c85304 1Gi RWO ceph-rbd 25h cephfs-claim1 Bound pvc-1bfa81b6-2c0b-47fa-9656-92dc52f69c52 1Gi RWO cephfs 87s Next, we can launch a test pod using the claim we made. First, create a file to store that data: vim cephfs-test-pod.yaml Add content