<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Xavki</title>
	<atom:link href="https://xavki.blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://xavki.blog/</link>
	<description>Open your Sources..</description>
	<lastBuildDate>Sat, 14 Mar 2026 18:28:43 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Reinforcement Learning environments and how to build them</title>
		<link>https://xavki.blog/reinforcement-learning-environments-and-how-to-build-them/</link>
					<comments>https://xavki.blog/reinforcement-learning-environments-and-how-to-build-them/#respond</comments>
		
		<dc:creator><![CDATA[news-review]]></dc:creator>
		<pubDate>Sat, 14 Mar 2026 18:28:43 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">https://xavki.blog/reinforcement-learning-environments-and-how-to-build-them/</guid>

					<description><![CDATA[<p>Overview The article from Unsloth.ai explores the evolution of Reinforcement Learning (RL) in the context of agentic AI, emphasizing the shift from static data learning to dynamic, experience-driven systems. It highlights the critical role of RL environments, which define permissible... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/reinforcement-learning-environments-and-how-to-build-them/">Reinforcement Learning environments and how to build them</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Overview</h2>
<p>The article from Unsloth.ai explores the evolution of Reinforcement Learning (RL) in the context of agentic AI, emphasizing the shift from static data learning to dynamic, experience-driven systems. It highlights the critical role of RL environments, which define permissible actions, state changes, and success metrics. The piece discusses the transition from traditional RL methods like PPO to more efficient algorithms such as GRPO and DPO, and introduces tools like NVIDIA NeMo Gym and Unsloth for building scalable RL workflows. The article also outlines the importance of environment design, verification logic, and the hybrid use of Supervised Fine-Tuning (SFT) and RL for training AI models effectively.</p>
<h2><strong>The Evolution of Reinforcement Learning (RL) in Agentic AI</strong></h2>
<p>Reinforcement Learning (RL) has been a cornerstone of AI development for decades, powering everything from early control systems to modern game-playing agents and large language models (LLMs). However, as AI systems become more <strong>agentic</strong>—capable of multi-step reasoning, tool use, and autonomous decision-making—RL is evolving to meet new challenges. This shift marks the dawn of the <strong>&quot;Era of Experience,&quot;</strong> where AI learns from interaction rather than just static datasets.</p>
<h3><strong>Why RL Environments Are Central to Agentic AI</strong></h3>
<p>At its core, RL is about teaching a model to learn through <strong>trial, feedback, and improvement</strong>. The key components of an RL workflow include:</p>
<ul>
<li><strong>Policy Model:</strong> The AI agent that makes decisions.</li>
<li><strong>Training Algorithm:</strong> The method used to update the model (e.g., PPO, GRPO, DPO).</li>
<li><strong>Environment:</strong> The simulated or real-world space where the agent operates, defining:
<ul>
<li><strong>Permissible actions</strong> (what the agent can do).</li>
<li><strong>State changes</strong> (how the world responds).</li>
<li><strong>Success metrics</strong> (how performance is measured).</li>
</ul>
</li>
</ul>
<p>The <strong>environment</strong> acts as the <strong>contract between learning and behavior</strong>, shaping how an agent improves over time. Unlike traditional supervised learning, where models are trained on fixed datasets, RL environments allow agents to <strong>explore, adapt, and recover from failures</strong> dynamically.</p>
<hr />
<h2><strong>When to Use RL vs. Supervised Fine-Tuning (SFT)</strong></h2>
<h3><strong>Supervised Fine-Tuning (SFT): Best for Clear, Demonstrated Behaviors</strong></h3>
<ul>
<li><strong>Use Case:</strong> When you can provide <strong>explicit examples</strong> of desired behavior (e.g., instruction-response pairs).</li>
<li><strong>Strengths:</strong>
<ul>
<li>Teaches <strong>format and style</strong> effectively.</li>
<li>Works well for <strong>single-step tasks</strong> (e.g., text summarization, translation).</li>
</ul>
</li>
<li><strong>Limitations:</strong>
<ul>
<li>Struggles with <strong>multi-step reasoning</strong> (e.g., planning, tool use).</li>
<li>Requires <strong>large, high-quality datasets</strong> of demonstrations.</li>
</ul>
</li>
</ul>
<h3><strong>Reinforcement Learning (RL): Best for Complex, Verifiable Tasks</strong></h3>
<ul>
<li><strong>Use Case:</strong> When you need an agent to <strong>explore and optimize</strong> for a goal (e.g., math, coding, tool use).</li>
<li><strong>Strengths:</strong>
<ul>
<li><strong>Resilient to edge cases</strong> (learns from failure).</li>
<li><strong>Optimizes for long-term outcomes</strong> (e.g., multi-step tool use).</li>
<li><strong>Works with verifiable rewards</strong> (e.g., unit test passes, correct answers).</li>
</ul>
</li>
<li><strong>Limitations:</strong>
<ul>
<li><strong>Computationally expensive</strong> (requires many rollouts).</li>
<li><strong>Harder to stabilize</strong> (reward design is critical).</li>
</ul>
</li>
</ul>
<h3><strong>Hybrid Approach: SFT + RL</strong></h3>
<ul>
<li>Many modern AI systems (e.g., <strong>NVIDIA Nemotron 3</strong>) use <strong>SFT first</strong> to ground the model, then <strong>RL for refinement</strong>.</li>
<li>This balances <strong>efficiency</strong> (SFT) with <strong>generalization</strong> (RL).</li>
</ul>
<hr />
<h2><strong>Modern RL Algorithms: From PPO to GRPO and DPO</strong></h2>
<h3><strong>Traditional RL: Proximal Policy Optimization (PPO)</strong></h3>
<ul>
<li><strong>How it works:</strong> Uses a <strong>policy model, reward model, and critic model</strong> to optimize actions.</li>
<li><strong>Challenges:</strong>
<ul>
<li><strong>Resource-intensive</strong> (requires multiple models).</li>
<li><strong>Hard to scale</strong> for complex tasks.</li>
</ul>
</li>
</ul>
<h3><strong>Direct Preference Optimization (DPO)</strong></h3>
<ul>
<li><strong>How it works:</strong> Treats alignment as a <strong>classification problem</strong> on static preference data.</li>
<li><strong>Strengths:</strong>
<ul>
<li><strong>Simpler than PPO</strong> (no RL loop).</li>
<li>Works well for <strong>single-step tasks</strong> (e.g., chatbot responses).</li>
</ul>
</li>
<li><strong>Limitations:</strong>
<ul>
<li><strong>No exploration</strong> (can’t discover new strategies).</li>
<li><strong>Poor for multi-step reasoning</strong> (e.g., tool use, planning).</li>
</ul>
</li>
</ul>
<h3><strong>Group Relative Policy Optimization (GRPO)</strong></h3>
<ul>
<li><strong>How it works:</strong> An optimized version of PPO that <strong>replaces the critic model with group-based scoring</strong>.</li>
<li><strong>Strengths:</strong>
<ul>
<li><strong>More efficient</strong> than PPO (fewer models).</li>
<li><strong>Works with verifiable rewards</strong> (e.g., unit tests, deterministic checks).</li>
<li><strong>Better for agentic workflows</strong> (multi-step reasoning).</li>
</ul>
</li>
</ul>
<h3><strong>Reinforcement Learning from Verifiable Rewards (RLVR)</strong></h3>
<ul>
<li><strong>Key Idea:</strong> Shifts focus from <strong>subjective scoring</strong> (e.g., human feedback) to <strong>explicit verification</strong> (e.g., code execution, tool correctness).</li>
<li><strong>Why it matters:</strong>
<ul>
<li><strong>More reliable</strong> (avoids bias in human ratings).</li>
<li><strong>Scalable</strong> (works with automated checks).</li>
</ul>
</li>
</ul>
<hr />
<h2><strong>Building RL Environments: Key Components</strong></h2>
<h3><strong>1. Defining the Task</strong></h3>
<ul>
<li>The <strong>goal</strong> the agent must accomplish (e.g., sending an email, solving a math problem).</li>
<li><strong>Example (Workplace Assistant):</strong>
<pre><code>User query: &quot;Send an email to [email protected] with the subject 'Team Meeting' and body 'Let's meet tomorrow at 2pm.'&quot;
Expected tool call:
email_send_email(
  recipient=&quot;[email protected]&quot;,
  subject=&quot;Team Meeting&quot;,
  body=&quot;Let's meet tomorrow at 2pm.&quot;
)
</code></pre>
</li>
</ul>
<h3><strong>2. Generating Task Data</strong></h3>
<ul>
<li><strong>Real-world data:</strong> Curated prompts and ground-truth answers.</li>
<li><strong>Synthetic data:</strong> Generated using tools like <strong>NeMo Data Designer</strong> (e.g., 5,000 Python coding problems with unit tests).</li>
</ul>
<h3><strong>3. Environment Design</strong></h3>
<p>An RL environment consists of:</p>
<ul>
<li><strong>Agent:</strong> The AI model making decisions.</li>
<li><strong>Resources Server:</strong> The &quot;world&quot; the agent interacts with (e.g., tools, databases).</li>
<li><strong>Verification Logic:</strong> Determines success/failure (e.g., unit tests, reward functions).</li>
</ul>
<h4><strong>Example: Agent Server Pseudocode</strong></h4>
<pre><code class="language-python">async def run(task_data):
    # 1. Initialize episode
    resource_server.seed_session(task_data)
    # 2. Run the agent loop
    response = self.responses(task_data.prompt, task_data.tools)
    # 3. Grade the result
    reward = resource_server.verify(response, task_data.ground_truth)
    return response, reward

async def responses(prompt, tools):
    conversation = prompt
    step = 0
    while step &lt; max_steps:
        model_output = model_server.responses(conversation, tools)
        conversation.append(model_output)
        if model_output is text:
            break  # Model is done
        for tool_call in model_output.function_calls:
            result = resource_server.post(f&quot;/{tool_call.name}&quot;, tool_call.arguments)
            conversation.append(result)
        step += 1
    return conversation
</code></pre>
<h4><strong>Example: Resources Server</strong></h4>
<pre><code class="language-python">class MyResourceServer(SimpleResourcesServer):
    async def seed_session(self, session_id, initial_data):
        # Initialize the sandbox for this rollout
        self.state[session_id] = initialize_environment(initial_data)
    
    async def my_custom_tool(self, session_id, tool_args):
        # Execute an action in the environment
        result = execute_action(self.state[session_id], tool_args)
        return result
</code></pre>
<h3><strong>4. Verification Logic</strong></h3>
<ul>
<li><strong>Binary Rewards (0/1):</strong> Simple pass/fail checks (e.g., unit test passes).</li>
<li><strong>Continuous Rewards (-∞ to +∞):</strong> Granular feedback (e.g., partial credit for near-correct answers).</li>
<li><strong>Best Practices:</strong>
<ul>
<li><strong>Deterministic checks</strong> (e.g., code execution) are more reliable than subjective scoring.</li>
<li><strong>Sandboxed execution</strong> (e.g., running generated code in a safe environment).</li>
<li><strong>LLM-as-a-judge</strong> (for open-ended tasks where exact matches are hard).</li>
</ul>
</li>
</ul>
<hr />
<h2><strong>Tools for Building RL Workflows</strong></h2>
<h3><strong>1. NVIDIA NeMo Gym</strong></h3>
<ul>
<li><strong>Purpose:</strong> Open-source library for <strong>building and scaling RL environments</strong>.</li>
<li><strong>Key Features:</strong>
<ul>
<li><strong>Decouples rollout collection from training</strong> (scalable to thousands of parallel environments).</li>
<li><strong>Standardizes trajectories</strong> (OpenAI Responses API format).</li>
<li><strong>Manages resource lifecycles</strong> (e.g., session state, tool servers).</li>
</ul>
</li>
<li><strong>Use Cases:</strong>
<ul>
<li>Training <strong>Nemotron 3</strong> models.</li>
<li>Building <strong>scientific agents</strong> (e.g., hypothesis testing, simulations).</li>
</ul>
</li>
</ul>
<h3><strong>2. Unsloth</strong></h3>
<ul>
<li><strong>Purpose:</strong> Efficient <strong>RL training framework</strong> for fine-tuning LLMs.</li>
<li><strong>Key Features:</strong>
<ul>
<li><strong>Optimized for GRPO and PPO</strong>.</li>
<li><strong>Works with NeMo Gym rollouts</strong>.</li>
<li><strong>Supports PyTorch-native stacks</strong>.</li>
</ul>
</li>
</ul>
<h3><strong>3. NVIDIA NeMo RL</strong></h3>
<ul>
<li><strong>Purpose:</strong> <strong>Training library</strong> for RL algorithms (e.g., GRPO).</li>
<li><strong>Key Features:</strong>
<ul>
<li><strong>Integrates with NeMo Gym</strong>.</li>
<li><strong>Scalable for large models</strong>.</li>
</ul>
</li>
</ul>
<h3><strong>4. Hugging Face TRL</strong></h3>
<ul>
<li><strong>Purpose:</strong> <strong>Training library</strong> for RLHF (Reinforcement Learning from Human Feedback).</li>
<li><strong>Key Features:</strong>
<ul>
<li><strong>Supports PPO, DPO, and other algorithms</strong>.</li>
<li><strong>Works with NeMo Gym environments</strong>.</li>
</ul>
</li>
</ul>
<hr />
<h2><strong>Real-World Applications of RL Environments</strong></h2>
<h3><strong>1. NVIDIA Nemotron 3</strong></h3>
<ul>
<li><strong>Use Case:</strong> Training <strong>agentic AI models</strong> for multi-step reasoning.</li>
<li><strong>Approach:</strong>
<ul>
<li><strong>SFT first</strong> (to ground the model).</li>
<li><strong>RL refinement</strong> (using NeMo Gym environments).</li>
<li><strong>Verification logic</strong> prioritizes <strong>correct trajectories</strong> (e.g., tool use, planning).</li>
</ul>
</li>
</ul>
<h3><strong>2. Scientific Agents (Edison Scientific + NVIDIA)</strong></h3>
<ul>
<li><strong>Use Case:</strong> Training agents to <strong>explore hypotheses, run simulations, and analyze data</strong>.</li>
<li><strong>Approach:</strong>
<ul>
<li><strong>NeMo Gym + Aviary Gym</strong> for domain-specific environments.</li>
<li><strong>Deterministic feedback</strong> (e.g., simulation results).</li>
</ul>
</li>
</ul>
<h3><strong>3. Coding Assistants</strong></h3>
<ul>
<li><strong>Use Case:</strong> Training models to <strong>write, debug, and optimize code</strong>.</li>
<li><strong>Approach:</strong>
<ul>
<li><strong>Synthetic data generation</strong> (e.g., 5,000 Python problems with unit tests).</li>
<li><strong>RL training</strong> (e.g., GRPO for verifiable correctness).</li>
</ul>
</li>
</ul>
<hr />
<h2><strong>Getting Started with RL Environments</strong></h2>
<h3><strong>Step 1: Define Your Task</strong></h3>
<ul>
<li>What should the agent <strong>accomplish</strong>? (e.g., send emails, solve math problems, write code).</li>
<li>What <strong>tools</strong> does it need? (e.g., databases, APIs, sandboxes).</li>
</ul>
<h3><strong>Step 2: Design the Environment</strong></h3>
<ul>
<li><strong>Agent:</strong> How will it generate actions? (e.g., text, tool calls).</li>
<li><strong>Resources Server:</strong> What external state does it interact with? (e.g., tools, databases).</li>
<li><strong>Verification Logic:</strong> How will success be measured? (e.g., unit tests, reward functions).</li>
</ul>
<h3><strong>Step 3: Generate Rollouts</strong></h3>
<ul>
<li>Use <strong>NeMo Gym</strong> to run <strong>parallel environments</strong> at scale.</li>
<li>Collect <strong>trajectories</strong> (sequences of states, actions, rewards).</li>
</ul>
<h3><strong>Step 4: Train the Model</strong></h3>
<ul>
<li>Use <strong>Unsloth, NeMo RL, or Hugging Face TRL</strong> to optimize the policy.</li>
<li>Iterate: <strong>generate rollouts → verify outcomes → update policy → re-evaluate</strong>.</li>
</ul>
<h3><strong>Step 5: Deploy and Refine</strong></h3>
<ul>
<li>Test in <strong>real-world scenarios</strong>.</li>
<li><strong>Improve verification logic</strong> based on edge cases.</li>
<li><strong>Scale up</strong> with more data and compute.</li>
</ul>
<hr />
<h2><strong>The Future of RL in Agentic AI</strong></h2>
<p>The <strong>Era of Experience</strong> is just beginning. As RL environments become more <strong>sophisticated and accessible</strong>, we can expect:</p>
<ul>
<li><strong>More autonomous agents</strong> (e.g., AI that plans, reasons, and uses tools).</li>
<li><strong>Better generalization</strong> (agents that adapt to new tasks without retraining).</li>
<li><strong>Scalable, verifiable AI</strong> (replacing subjective feedback with deterministic checks).</li>
</ul>
<p>Tools like <strong>NeMo Gym, Unsloth, and NeMo RL</strong> are making it easier than ever to build these systems. The key takeaway? <strong>The environment defines the contract for intelligence</strong>—and mastering it is the next frontier in AI.</p>
<h2>Extra links</h2>
<ul>
<li><a href="https://developer.nvidia.com/blog/training-scientific-agents-with-reinforcement-learning/">https://developer.nvidia.com/blog/training-scientific-agents-with-reinforcement-learning/</a></li>
<li><a href="https://huggingface.co/docs/trl/index">https://huggingface.co/docs/trl/index</a></li>
<li><a href="https://github.com/NVIDIA/NeMo-Gym">https://github.com/NVIDIA/NeMo-Gym</a></li>
<li><a href="https://unsloth.ai/blog/grpo-training">https://unsloth.ai/blog/grpo-training</a></li>
</ul>
<p>L’article <a href="https://xavki.blog/reinforcement-learning-environments-and-how-to-build-them/">Reinforcement Learning environments and how to build them</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/reinforcement-learning-environments-and-how-to-build-them/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GitHub &#8211; seaweedfs/seaweedfs</title>
		<link>https://xavki.blog/github-seaweedfs-seaweedfs/</link>
					<comments>https://xavki.blog/github-seaweedfs-seaweedfs/#respond</comments>
		
		<dc:creator><![CDATA[news-review]]></dc:creator>
		<pubDate>Sat, 14 Mar 2026 16:35:49 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">https://xavki.blog/github-seaweedfs-seaweedfs/</guid>

					<description><![CDATA[<p>Overview SeaweedFS is an open-source, distributed file system designed for high scalability and fast file access. It efficiently stores billions of files with minimal metadata overhead (40 bytes per file) and supports features like replication, erasure coding, cloud integration, and... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/github-seaweedfs-seaweedfs/">GitHub &#8211; seaweedfs/seaweedfs</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Overview</h2>
<p>SeaweedFS is an open-source, distributed file system designed for high scalability and fast file access. It efficiently stores billions of files with minimal metadata overhead (40 bytes per file) and supports features like replication, erasure coding, cloud integration, and POSIX-compatible directories. Built for simplicity, it offers O(1) disk read operations, making it ideal for small files while also handling large files via chunking. SeaweedFS includes tools like S3-compatible APIs, WebDAV, and Kubernetes CSI support, and is licensed under Apache 2.0.</p>
<h3><strong>What is SeaweedFS? 🌊📁</strong></h3>
<p>SeaweedFS is a <strong>distributed file system</strong> designed to store and serve <strong>billions of files efficiently</strong> while maintaining <strong>high performance</strong>. It is open-source (Apache 2.0 licensed) and optimized for <strong>small files</strong>, though it can handle large files via chunking. Unlike traditional file systems, SeaweedFS minimizes metadata overhead and avoids bottlenecks by distributing file metadata across volume servers rather than centralizing it.</p>
<hr />
<h3><strong>Core Features ✨</strong></h3>
<h4><strong>1. High Scalability &amp; Performance</strong></h4>
<ul>
<li><strong>Stores billions of files</strong> with minimal overhead (just <strong>40 bytes per file</strong> for metadata).</li>
<li><strong>O(1) disk read operations</strong>—files are accessed in a single disk read, making it <strong>extremely fast</strong> for small files.</li>
<li><strong>Linear scalability</strong>—add more volume servers to increase storage capacity without complex rebalancing.</li>
</ul>
<h4><strong>2. Distributed Architecture</strong></h4>
<ul>
<li><strong>Master Server</strong>: Manages volume locations (static metadata) and assigns file IDs.</li>
<li><strong>Volume Servers</strong>: Store actual file data and manage file metadata (volume ID, offset, size).</li>
<li><strong>Filer (Optional)</strong>: Adds directory structures and POSIX attributes using external databases (MySQL, PostgreSQL, Redis, etc.).</li>
</ul>
<h4><strong>3. Replication &amp; Data Protection</strong></h4>
<ul>
<li><strong>Configurable replication</strong> (e.g., same rack, different data center, or hybrid setups).</li>
<li><strong>Erasure coding</strong> for warm data (reduces storage costs while maintaining availability).</li>
<li><strong>Rack-aware and data-center-aware</strong> placement for fault tolerance.</li>
</ul>
<h4><strong>4. Cloud &amp; Hybrid Storage Integration</strong></h4>
<ul>
<li><strong>Hot data</strong> (frequently accessed) stays on local servers for speed.</li>
<li><strong>Warm data</strong> (less frequently accessed) is offloaded to cloud storage (AWS S3, Google Cloud, Azure, etc.) with <strong>O(1) access time</strong>.</li>
<li><strong>Cost-efficient</strong>—minimizes cloud API costs by reducing unnecessary cloud access.</li>
</ul>
<h4><strong>5. Multiple Access Methods</strong></h4>
<ul>
<li><strong>S3-compatible API</strong> (works with AWS CLI, SDKs, and tools like MinIO).</li>
<li><strong>WebDAV</strong> (mount as a network drive on Windows/Mac).</li>
<li><strong>Hadoop/Spark/Flink integration</strong> (via Hadoop Compatible File System).</li>
<li><strong>FUSE support</strong> (mount as a local filesystem).</li>
<li><strong>REST API</strong> for direct HTTP uploads/downloads.</li>
</ul>
<h4><strong>6. Enterprise-Grade Features</strong></h4>
<ul>
<li><strong>Automatic failover</strong> (no single point of failure).</li>
<li><strong>TTL (Time-to-Live) for files</strong> (auto-deletion after expiration).</li>
<li><strong>Encryption (AES-256-GCM)</strong> for secure storage.</li>
<li><strong>Compression</strong> (automatic based on MIME type).</li>
<li><strong>Active-Active Replication</strong> (cross-cluster sync for high availability).</li>
</ul>
<hr />
<h3><strong>How SeaweedFS Works 🔧</strong></h3>
<h4><strong>1. File Storage &amp; Retrieval</strong></h4>
<ul>
<li>
<p><strong>Uploading a File</strong></p>
<ul>
<li>Client requests a <strong>file ID (fid)</strong> from the master server.</li>
<li>Master returns a <strong>volume ID + server URL</strong>.</li>
<li>Client uploads the file to the assigned volume server via HTTP.</li>
<li>File metadata (volume ID, offset, size) is stored on the volume server.</li>
</ul>
</li>
<li>
<p><strong>Downloading a File</strong></p>
<ul>
<li>Client queries the master for the <strong>volume server location</strong> using the file’s volume ID.</li>
<li>Client retrieves the file directly from the volume server via HTTP.</li>
</ul>
</li>
</ul>
<h4><strong>2. Volume Management</strong></h4>
<ul>
<li>Each <strong>volume</strong> is <strong>32GB</strong> and can store many small files.</li>
<li>Volumes are <strong>statically assigned</strong> to files, making lookups <strong>O(1)</strong> (no complex hashing).</li>
<li><strong>Replication</strong> is applied at the volume level (e.g., replicate a volume across 3 servers).</li>
</ul>
<h4><strong>3. Filer (Directory Support)</strong></h4>
<ul>
<li>The <strong>Filer</strong> is a separate service that adds <strong>directory structures</strong>.</li>
<li>Uses <strong>external databases</strong> (MySQL, PostgreSQL, Redis, etc.) to store directory metadata.</li>
<li>Supports <strong>POSIX attributes</strong> (permissions, timestamps, etc.).</li>
</ul>
<hr />
<h3><strong>Comparison with Other File Systems 🆚</strong></h3>
<p>| Feature | SeaweedFS | HDFS | GlusterFS | Ceph | MinIO |<br />|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|<br />| <strong>Optimized For</strong> | Small files, high concurrency | Large files, batch processing | General-purpose | General-purpose | S3-compatible object storage |<br />| <strong>Metadata Overhead</strong> | <strong>40 bytes per file</strong> | High (centralized namenode) | Moderate | High (CRUSH algorithm) | Moderate |<br />| <strong>Scalability</strong> | <strong>Linear, no rebalancing</strong> | Limited by namenode | Limited by hashing | Complex (CRUSH) | Limited by sharding |<br />| <strong>Cloud Integration</strong> | <strong>Yes (hot/warm tiering)</strong> | Limited | No | Yes | Yes (native) |<br />| <strong>POSIX Support</strong> | <strong>Yes (via Filer)</strong> | Yes | Yes | Yes | No |<br />| <strong>Erasure Coding</strong> | <strong>Yes (warm data only)</strong> | No | No | Yes | Yes (always on) |</p>
<hr />
<h3><strong>Performance Benchmarks 🚀</strong></h3>
<ul>
<li><strong>Write 1M x 1KB files</strong> (16 concurrent connections):
<ul>
<li><strong>15,708 requests/sec</strong> (16.2 MB/s).</li>
</ul>
</li>
<li><strong>Read 1M files randomly</strong> (16 concurrent connections):
<ul>
<li><strong>47,019 requests/sec</strong> (48.5 MB/s).</li>
</ul>
</li>
<li><strong>Mixed workload (GET/PUT/DELETE/STAT)</strong>:
<ul>
<li><strong>3.3 GB/s throughput</strong> (550 objects/sec).</li>
</ul>
</li>
</ul>
<hr />
<h3><strong>Getting Started 🛠️</strong></h3>
<h4><strong>1. Quick Setup (Single Node)</strong></h4>
<pre><code class="language-bash"># Download the binary
wget https://github.com/seaweedfs/seaweedfs/releases/latest/download/weed_linux_amd64.tar.gz
tar -xvf weed_linux_amd64.tar.gz

# Start a mini cluster (master + volume + filer + S3)
./weed mini -dir=/data
</code></pre>
<ul>
<li><strong>Access UIs</strong>:
<ul>
<li>Master: <code>http://localhost:9333</code></li>
<li>Filer: <code>http://localhost:8888</code></li>
<li>S3: <code>http://localhost:8333</code></li>
</ul>
</li>
</ul>
<h4><strong>2. Production Setup (Multi-Node)</strong></h4>
<pre><code class="language-bash"># Start master
./weed master

# Start volume servers
./weed volume -dir=/data1 -max=5 -master=localhost:9333 -port=8080
./weed volume -dir=/data2 -max=10 -master=localhost:9333 -port=8081

# Start filer (optional)
./weed filer -master=localhost:9333
</code></pre>
<h4><strong>3. Using S3 API</strong></h4>
<pre><code class="language-bash">export AWS_ACCESS_KEY_ID=admin
export AWS_SECRET_ACCESS_KEY=key

# Start S3 gateway
./weed server -dir=/data -s3

# Use AWS CLI
aws s3 --endpoint=http://localhost:8333 ls
</code></pre>
<hr />
<h3><strong>Use Cases 🎯</strong></h3>
<p>✅ <strong>Media Storage</strong> (images, videos, thumbnails)<br />✅ <strong>Log &amp; Backup Storage</strong> (efficient small file handling)<br />✅ <strong>Hybrid Cloud Storage</strong> (local + cloud tiering)<br />✅ <strong>Kubernetes Persistent Storage</strong> (via CSI driver)<br />✅ <strong>S3-Compatible Object Storage</strong> (cheaper alternative to AWS S3)<br />✅ <strong>High-Performance File Serving</strong> (CDN-like speed for static assets)</p>
<hr />
<h3><strong>Enterprise Edition 🏢</strong></h3>
<ul>
<li><strong>Self-healing storage format</strong> (better data protection).</li>
<li><strong>Priority support &amp; consulting</strong>.</li>
<li><strong>Advanced monitoring &amp; management tools</strong>.</li>
<li>Visit <a href="https://seaweedfs.com">seaweedfs.com</a> for details.</li>
</ul>
<hr />
<h3><strong>Community &amp; Support 🤝</strong></h3>
<ul>
<li><strong>GitHub</strong>: <a href="https://github.com/seaweedfs/seaweedfs">https://github.com/seaweedfs/seaweedfs</a></li>
<li><strong>Slack</strong>: <a href="https://join.slack.com/t/seaweedfs/shared_invite/...">SeaweedFS Slack</a></li>
<li><strong>Twitter</strong>: <a href="https://twitter.com/seaweedfs">@seaweedfs</a></li>
<li><strong>Documentation</strong>: <a href="https://github.com/seaweedfs/seaweedfs/wiki">Wiki</a></li>
<li><strong>Sponsorship</strong>: <a href="https://www.patreon.com/seaweedfs">Patreon</a></li>
</ul>
<hr />
<h3><strong>Why Choose SeaweedFS? 🏆</strong></h3>
<p>✔ <strong>Blazing fast</strong> (O(1) disk reads, optimized for small files).<br />✔ <strong>Simple &amp; scalable</strong> (no complex rebalancing, just add servers).<br />✔ <strong>Cloud-friendly</strong> (hot/warm tiering, cost-efficient).<br />✔ <strong>Flexible</strong> (S3, WebDAV, FUSE, Hadoop, Kubernetes support).<br />✔ <strong>Open-source &amp; enterprise-ready</strong> (Apache 2.0 + paid support).</p>
<h2>Extra links</h2>


<ul>
<li><a href="https://github.com/seaweedfs/seaweedfs/wiki">https://github.com/seaweedfs/seaweedfs/wiki</a></li>
<li><a href="https://github.com/seaweedfs/seaweedfs/blob/master/README.md">https://github.com/seaweedfs/seaweedfs/blob/master/README.md</a></li>
<li><a href="https://www.seaweedfs.com/">https://www.seaweedfs.com/</a></li>
<li><a href="https://github.com/seaweedfs/seaweedfs#quick-start">https://github.com/seaweedfs/seaweedfs#quick-start</a></li>
</ul>



<p></p>
<p>L’article <a href="https://xavki.blog/github-seaweedfs-seaweedfs/">GitHub &#8211; seaweedfs/seaweedfs</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/github-seaweedfs-seaweedfs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kueue</title>
		<link>https://xavki.blog/kueue/</link>
					<comments>https://xavki.blog/kueue/#respond</comments>
		
		<dc:creator><![CDATA[news-review]]></dc:creator>
		<pubDate>Fri, 13 Mar 2026 10:06:54 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">https://xavki.blog/kueue/</guid>

					<description><![CDATA[<p>Overview Kueue is an open-source, cloud-native job queueing system designed for Kubernetes, catering to batch, HPC, AI/ML, and similar workloads. It enables organizations to create multi-tenant batch services with resource quotas and hierarchical sharing, ensuring efficient resource allocation across teams.... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/kueue/">Kueue</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Overview</h2>
<p>Kueue is an open-source, cloud-native job queueing system designed for Kubernetes, catering to batch, HPC, AI/ML, and similar workloads. It enables organizations to create multi-tenant batch services with resource quotas and hierarchical sharing, ensuring efficient resource allocation across teams. Kueue integrates seamlessly with Kubernetes tools like kube-scheduler and cluster-autoscaler, supporting both on-premises and cloud environments with dynamic and heterogeneous resources. The project welcomes contributions via GitHub Pull Requests.</p>
<h3><strong>What is Kueue? 🚀</strong></h3>
<p>Kueue is a <strong>Kubernetes-native job queueing system</strong> built to manage batch workloads, high-performance computing (HPC), AI/ML training, and other similar applications. It helps organizations optimize resource usage by enforcing quotas, prioritizing jobs, and ensuring fair sharing across multiple teams or tenants.</p>
<hr />
<h3><strong>Key Features of Kueue ✨</strong></h3>
<ul>
<li>
<p><strong>Multi-Tenancy &amp; Resource Quotas</strong></p>
<ul>
<li>Define <strong>resource quotas</strong> (CPU, memory, GPUs) for teams or departments.</li>
<li>Enforce <strong>hierarchical sharing</strong> to prevent resource starvation and ensure fairness.</li>
<li>Example: Team A gets 50% of cluster resources, Team B gets 30%, and Team C gets 20%.</li>
</ul>
</li>
<li>
<p><strong>Job Scheduling &amp; Prioritization</strong></p>
<ul>
<li>Decides <strong>when jobs should wait</strong> (queueing) and <strong>when/where they should run</strong> (scheduling).</li>
<li>Works alongside <strong>Kubernetes’ kube-scheduler</strong> for optimal placement.</li>
<li>Supports <strong>preemption</strong> (higher-priority jobs can interrupt lower-priority ones).</li>
</ul>
</li>
<li>
<p><strong>Dynamic &amp; Heterogeneous Resource Support</strong></p>
<ul>
<li>Works in <strong>on-premises</strong> and <strong>cloud</strong> environments.</li>
<li>Handles <strong>heterogeneous resources</strong> (e.g., different GPU types, spot instances).</li>
<li>Integrates with <strong>cluster-autoscaler</strong> to dynamically provision resources as needed.</li>
</ul>
</li>
<li>
<p><strong>Seamless Kubernetes Integration</strong></p>
<ul>
<li>Built to work with <strong>standard Kubernetes tools</strong> (e.g., kube-scheduler, cluster-autoscaler).</li>
<li>No need for custom schedulers—Kueue extends existing Kubernetes functionality.</li>
</ul>
</li>
<li>
<p><strong>Open-Source &amp; Community-Driven</strong></p>
<ul>
<li>Hosted on <strong>GitHub</strong> with a <strong>Pull Request-based contribution model</strong>.</li>
<li>Welcomes <strong>new contributors</strong> and users to improve the project.</li>
</ul>
</li>
</ul>
<hr />
<h3><strong>How Kueue Works 🔧</strong></h3>
<ol>
<li>
<p><strong>Job Submission</strong></p>
<ul>
<li>Users submit batch jobs (e.g., AI training, data processing) to Kueue.</li>
<li>Jobs are assigned to <strong>queues</strong> based on team, priority, or resource requirements.</li>
</ul>
</li>
<li>
<p><strong>Quota Enforcement</strong></p>
<ul>
<li>Kueue checks if the job fits within the <strong>available quota</strong> for the team/tenant.</li>
<li>If resources are available, the job proceeds; otherwise, it waits in the queue.</li>
</ul>
</li>
<li>
<p><strong>Scheduling &amp; Execution</strong></p>
<ul>
<li>Kueue works with <strong>kube-scheduler</strong> to place jobs on suitable nodes.</li>
<li>If resources are scarce, <strong>preemption</strong> may occur (higher-priority jobs take precedence).</li>
</ul>
</li>
<li>
<p><strong>Dynamic Scaling (Optional)</strong></p>
<ul>
<li>If integrated with <strong>cluster-autoscaler</strong>, Kueue can trigger <strong>auto-scaling</strong> to meet demand.</li>
</ul>
</li>
</ol>
<hr />
<h3><strong>Use Cases 🎯</strong></h3>
<ul>
<li>
<p><strong>AI/ML Training</strong></p>
<ul>
<li>Manage GPU/TPU resources efficiently across multiple teams.</li>
<li>Prevent resource hogging by enforcing quotas.</li>
</ul>
</li>
<li>
<p><strong>High-Performance Computing (HPC)</strong></p>
<ul>
<li>Schedule large-scale simulations or data processing jobs.</li>
<li>Ensure fair sharing in shared HPC clusters.</li>
</ul>
</li>
<li>
<p><strong>Batch Processing</strong></p>
<ul>
<li>Run ETL (Extract, Transform, Load) jobs at scale.</li>
<li>Optimize resource usage for cost savings.</li>
</ul>
</li>
<li>
<p><strong>Multi-Tenant Kubernetes Clusters</strong></p>
<ul>
<li>Share a single cluster among multiple teams without conflicts.</li>
<li>Enforce resource limits to prevent noisy neighbors.</li>
</ul>
</li>
</ul>
<hr />
<h3><strong>Getting Started with Kueue 🛠️</strong></h3>
<ul>
<li>
<p><strong>Installation</strong></p>
<ul>
<li>Kueue can be installed via <strong>Helm</strong> or <strong>kubectl</strong> (YAML manifests).</li>
<li>Requires <strong>Kubernetes 1.22+</strong>.</li>
</ul>
</li>
<li>
<p><strong>Configuration</strong></p>
<ul>
<li>Define <strong>resource quotas</strong> (e.g., CPU, memory, GPUs).</li>
<li>Set up <strong>queues</strong> for different teams or job types.</li>
</ul>
</li>
<li>
<p><strong>Submitting Jobs</strong></p>
<ul>
<li>Jobs are submitted as <strong>Kubernetes Custom Resources (CRDs)</strong>.</li>
<li>Example: <code>kubectl apply -f job.yaml</code></li>
</ul>
</li>
<li>
<p><strong>Monitoring &amp; Logging</strong></p>
<ul>
<li>Use <strong>Kubernetes-native tools</strong> (e.g., <code>kubectl get jobs</code>, Prometheus, Grafana).</li>
</ul>
</li>
</ul>
<hr />
<h3><strong>Why Choose Kueue? 🏆</strong></h3>
<p>✅ <strong>Built for Kubernetes</strong> – No need for external job schedulers.<br />
✅ <strong>Multi-Tenancy Support</strong> – Fair resource sharing across teams.<br />
✅ <strong>Dynamic &amp; Cloud-Friendly</strong> – Works with autoscaling and heterogeneous resources.<br />
✅ <strong>Open-Source &amp; Extensible</strong> – Customize and contribute to the project.<br />
✅ <strong>Cost-Effective</strong> – Optimize resource usage to reduce cloud spending.</p>
<hr />
<h3><strong>Limitations &amp; Considerations ⚠️</strong></h3>
<ul>
<li><strong>Learning Curve</strong> – Requires familiarity with Kubernetes concepts.</li>
<li><strong>Not a Replacement for All Schedulers</strong> – Best suited for batch/HPC/AI workloads (not real-time apps).</li>
<li><strong>Community-Driven</strong> – Features depend on contributions and community adoption.</li>
</ul>
<h2>Extra links</h2>
<ul>
<li>https://github.com/kubernetes-sigs/kueue</li>
<li>https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/</li>
<li>https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler</li>
<li>https://helm.sh/docs/intro/install/</li>
</ul>
<p>L’article <a href="https://xavki.blog/kueue/">Kueue</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/kueue/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Deploy Traefik as a Gateway API &#8211; Sidero Documentation</title>
		<link>https://xavki.blog/deploy-traefik-as-a-gateway-api-sidero-documentation/</link>
					<comments>https://xavki.blog/deploy-traefik-as-a-gateway-api-sidero-documentation/#respond</comments>
		
		<dc:creator><![CDATA[news-review]]></dc:creator>
		<pubDate>Fri, 13 Mar 2026 10:06:20 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">https://xavki.blog/deploy-traefik-as-a-gateway-api-sidero-documentation/</guid>

					<description><![CDATA[<p>Overview This article provides a step-by-step guide to deploying Traefik, a modern reverse proxy and load balancer, on a Talos Linux Kubernetes cluster using Helm. It covers prerequisites like a running Talos cluster, kubectl, and Helm, then walks through installing... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/deploy-traefik-as-a-gateway-api-sidero-documentation/">Deploy Traefik as a Gateway API &#8211; Sidero Documentation</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Overview</h2>
<p>This article provides a step-by-step guide to deploying Traefik, a modern reverse proxy and load balancer, on a Talos Linux Kubernetes cluster using Helm. It covers prerequisites like a running Talos cluster, <code>kubectl</code>, and Helm, then walks through installing Gateway API CRDs, Traefik via Helm, configuring a Gateway, deploying a test application (whoami), setting up an HTTPRoute, and testing the setup. The guide ensures Traefik is properly integrated with Kubernetes&#8217; Gateway API for managing external traffic.</p>
<h2><strong>Deploying Traefik on a Talos Kubernetes Cluster: A Step-by-Step Guide</strong></h2>
<p>This guide explains how to deploy <strong>Traefik</strong>, a popular cloud-native reverse proxy and load balancer, on a <strong>Talos Linux Kubernetes cluster</strong> using <strong>Helm</strong> and the <strong>Gateway API</strong>. Traefik simplifies routing external traffic to services in your cluster while providing features like load balancing, TLS termination, and observability.</p>
<hr />
<h3><strong>Prerequisites</strong></h3>
<p>Before starting, ensure you have the following:</p>
<ul>
<li><strong>A running Talos Kubernetes cluster</strong> (see <a href="https://www.talos.dev/v1.6/introduction/getting-started/">Getting Started</a> or <a href="https://www.talos.dev/v1.6/introduction/production/">Production Cluster</a> guides).</li>
<li><strong><code>kubectl</code></strong> installed and configured to interact with your cluster.</li>
<li><strong>Helm</strong> installed locally (follow the <a href="https://helm.sh/docs/intro/install/">Helm installation guide</a>).</li>
</ul>
<p>Verify your setup by running:</p>
<pre><code class="language-bash">kubectl get nodes
</code></pre>
<hr />
<h3><strong>Step 1: Install Gateway API CRDs and Traefik RBAC</strong></h3>
<p>The <strong>Gateway API</strong> (a Kubernetes-native way to manage ingress traffic) is not included by default in Kubernetes. This step installs:</p>
<ul>
<li><strong>Custom Resource Definitions (CRDs)</strong> for <code>Gateway</code>, <code>HTTPRoute</code>, and other Gateway API resources.</li>
<li><strong>RBAC permissions</strong> for Traefik to manage these resources.</li>
</ul>
<p>Run the following commands:</p>
<pre><code class="language-bash">kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/standard-install.yaml
</code></pre>
<hr />
<h3><strong>Step 2: Install Traefik via Helm</strong></h3>
<p>Traefik is installed using its <strong>official Helm chart</strong>. Here’s how:</p>
<ol>
<li>
<p><strong>Create a <code>values.yaml</code> file</strong> to enable the <strong>Gateway API provider</strong> (Traefik’s integration with Kubernetes Gateway API):</p>
<pre><code class="language-yaml">providers:
  kubernetesGateway:
    enabled: true
</code></pre>
</li>
<li>
<p><strong>Add the Traefik Helm repository</strong> and install Traefik:</p>
<pre><code class="language-bash">helm repo add traefik https://traefik.github.io/charts
helm repo update
helm install traefik traefik/traefik -f values.yaml
</code></pre>
<ul>
<li>When installed with <code>kubernetesGateway</code> enabled, Traefik <strong>automatically creates a <code>GatewayClass</code> named <code>traefik</code></strong>, so you don’t need to define it manually.</li>
</ul>
</li>
</ol>
<hr />
<h3><strong>Step 3: Create a Gateway</strong></h3>
<p>A <strong>Gateway</strong> defines how external traffic enters your cluster. In this example, we configure Traefik to listen for <strong>HTTP traffic on port 8000</strong>.</p>
<p>Create a <code>gateway.yaml</code> file:</p>
<pre><code class="language-yaml">apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: my-gateway
spec:
  gatewayClassName: traefik
  listeners:
    - name: web
      port: 8000
      protocol: HTTP
</code></pre>
<p>Apply it:</p>
<pre><code class="language-bash">kubectl apply -f gateway.yaml
</code></pre>
<hr />
<h3><strong>Step 4: Deploy a Test Application</strong></h3>
<p>To verify Traefik’s routing, deploy a simple <strong><code>whoami</code></strong> application (a lightweight HTTP server that returns request details).</p>
<p>Create a <code>whoami.yaml</code> file:</p>
<pre><code class="language-yaml">apiVersion: apps/v1
kind: Deployment
metadata:
  name: whoami
spec:
  replicas: 2
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
        - name: whoami
          image: traefik/whoami
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: whoami
spec:
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: whoami
</code></pre>
<p>Apply it:</p>
<pre><code class="language-bash">kubectl apply -f whoami.yaml
</code></pre>
<hr />
<h3><strong>Step 5: Create an HTTPRoute</strong></h3>
<p>An <strong>HTTPRoute</strong> maps incoming traffic from the Gateway to the <code>whoami</code> service.</p>
<p>Create an <code>httproute.yaml</code> file:</p>
<pre><code class="language-yaml">apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: whoami-route
spec:
  parentRefs:
    - name: my-gateway
  rules:
    - matches:
        - path:
            type: PathPrefix
            value: /
      backendRefs:
        - name: whoami
          port: 80
</code></pre>
<p>Apply it:</p>
<pre><code class="language-bash">kubectl apply -f httproute.yaml
</code></pre>
<hr />
<h3><strong>Step 6: Test the Setup</strong></h3>
<p>Verify that Traefik is correctly routing traffic:</p>
<ol>
<li>
<p><strong>Forward the Traefik service locally</strong> to port <code>8000</code>:</p>
<pre><code class="language-bash">kubectl port-forward svc/traefik 8000:8000
</code></pre>
</li>
<li>
<p><strong>Send a test request</strong> to the <code>whoami</code> application:</p>
<pre><code class="language-bash">curl http://localhost:8000
</code></pre>
<ul>
<li>You should see a response with details about the request (e.g., hostname, IP, headers).</li>
</ul>
</li>
</ol>
<hr />
<h3><strong>Key Takeaways</strong></h3>
<ul>
<li><strong>Traefik simplifies ingress management</strong> in Kubernetes by integrating with the <strong>Gateway API</strong>.</li>
<li><strong>Helm makes installation easy</strong>, with customizable configurations via <code>values.yaml</code>.</li>
<li><strong>Testing with <code>whoami</code></strong> ensures your routing setup works before deploying real applications.</li>
<li><strong>Gateway API is the future</strong> of Kubernetes ingress, replacing older Ingress resources with a more flexible and powerful model.</li>
</ul>
<p>For production use, consider:</p>
<ul>
<li>Enabling <strong>TLS termination</strong> for HTTPS traffic.</li>
<li>Configuring <strong>load balancing</strong> and <strong>rate limiting</strong>.</li>
<li>Monitoring Traefik with <strong>Prometheus and Grafana</strong>.</li>
</ul>
<h2>Extra links</h2>
<ul>
<li>https://doc.traefik.io/traefik/providers/kubernetes-gateway/</li>
<li>https://gateway-api.sigs.k8s.io/</li>
<li>https://www.talos.dev/v1.6/introduction/getting-started/</li>
<li>https://helm.sh/docs/intro/using_helm/</li>
</ul>
<p>L’article <a href="https://xavki.blog/deploy-traefik-as-a-gateway-api-sidero-documentation/">Deploy Traefik as a Gateway API &#8211; Sidero Documentation</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/deploy-traefik-as-a-gateway-api-sidero-documentation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GitHub &#8211; kubernetes-sigs/kwok: Kubernetes WithOut Kubelet &#8211; Simulates thousands of Nodes and Clusters.</title>
		<link>https://xavki.blog/github-kubernetes-sigs-kwok-kubernetes-without-kubelet-simulates-thousands-of-nodes-and-clusters/</link>
					<comments>https://xavki.blog/github-kubernetes-sigs-kwok-kubernetes-without-kubelet-simulates-thousands-of-nodes-and-clusters/#respond</comments>
		
		<dc:creator><![CDATA[news-review]]></dc:creator>
		<pubDate>Thu, 12 Mar 2026 17:34:26 +0000</pubDate>
				<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">https://xavki.blog/github-kubernetes-sigs-kwok-kubernetes-without-kubelet-simulates-thousands-of-nodes-and-clusters/</guid>

					<description><![CDATA[<p>What is KWOK? KWOK (pronounced /kwɔk/) is a toolkit designed to simulate large-scale Kubernetes clusters efficiently. It stands for Kubernetes WithOut Kubelet, meaning it mimics the behavior of Kubernetes nodes and pods without running the actual kubelet agent on each... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/github-kubernetes-sigs-kwok-kubernetes-without-kubelet-simulates-thousands-of-nodes-and-clusters/">GitHub &#8211; kubernetes-sigs/kwok: Kubernetes WithOut Kubelet &#8211; Simulates thousands of Nodes and Clusters.</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>What is KWOK?</h2>
<p>KWOK (pronounced /kwɔk/) is a toolkit designed to simulate large-scale Kubernetes clusters efficiently. It stands for <strong>Kubernetes WithOut Kubelet</strong>, meaning it mimics the behavior of Kubernetes nodes and pods without running the actual <code>kubelet</code> agent on each node. This approach drastically reduces resource consumption, enabling users to simulate thousands of nodes on a single machine like a laptop.</p>
<hr />
<h2>Key Features of KWOK</h2>
<h3>1. <strong>Lightweight and Resource-Efficient</strong></h3>
<ul>
<li>Simulates thousands of nodes and pods with minimal CPU and memory usage.</li>
<li>Can reliably maintain <strong>1,000 nodes and 100,000 pods</strong> on a single machine.</li>
<li>Ideal for development, testing, and learning without needing cloud resources or physical hardware.</li>
</ul>
<h3>2. <strong>Fast Cluster Management</strong></h3>
<ul>
<li>Creates or deletes clusters and nodes <strong>instantly</strong>, without waiting for boot or provisioning.</li>
<li>Capable of simulating <strong>20 nodes or pods per second</strong>, making it highly efficient for rapid testing.</li>
</ul>
<h3>3. <strong>Compatibility with Kubernetes Ecosystem</strong></h3>
<ul>
<li>Works seamlessly with any tool or client that interacts with Kubernetes APIs, such as:
<ul>
<li><code>kubectl</code> for cluster management.</li>
<li><code>helm</code> for package management.</li>
<li><code>kui</code> for visualizing Kubernetes resources.</li>
</ul>
</li>
<li>Ensures that existing workflows and automation scripts remain functional.</li>
</ul>
<h3>4. <strong>Portability Across Platforms</strong></h3>
<ul>
<li>No specific hardware or software requirements.</li>
<li>Can be run using:
<ul>
<li>Pre-built Docker or Nerdctl images.</li>
<li>Binaries available for all major platforms (Linux, macOS, Windows).</li>
</ul>
</li>
<li>Easy to install and integrate into existing environments.</li>
</ul>
<h3>5. <strong>Flexibility for Testing and Development</strong></h3>
<ul>
<li>Allows customization of:
<ul>
<li>Node properties (e.g., types, labels, taints, capacities, conditions).</li>
<li>Pod behaviors and statuses (e.g., simulating crashes, resource constraints, or network issues).</li>
</ul>
</li>
<li>Enables testing of <strong>edge cases, failure scenarios, and scalability</strong> without risking real infrastructure.</li>
</ul>
<hr />
<h2>Tools Provided by KWOK</h2>
<h3>1. <strong><code>kwok</code></strong></h3>
<ul>
<li>The core component responsible for simulating the lifecycle of:
<ul>
<li>Fake nodes (e.g., mimicking real node behaviors like heartbeats, status updates).</li>
<li>Pods (e.g., simulating pod creation, deletion, and status changes).</li>
<li>Other Kubernetes API resources (e.g., deployments, services).</li>
</ul>
</li>
<li>Ensures that the simulated environment behaves like a real Kubernetes cluster.</li>
</ul>
<h3>2. <strong><code>kwokctl</code></strong></h3>
<ul>
<li>A command-line interface (CLI) tool designed to:
<ul>
<li>Streamline the <strong>creation and management of clusters</strong> with simulated nodes.</li>
<li>Simplify tasks like cluster setup, teardown, and configuration.</li>
<li>Provide an easy-to-use interface for developers and testers.</li>
</ul>
</li>
</ul>
<hr />
<h2>Use Cases for KWOK</h2>
<h3>1. <strong>Development and Testing</strong></h3>
<ul>
<li>Developers can test their applications in a <strong>large-scale environment</strong> without needing access to cloud resources.</li>
<li>Useful for validating <strong>scalability, performance, and resilience</strong> of Kubernetes workloads.</li>
</ul>
<h3>2. <strong>Learning and Education</strong></h3>
<ul>
<li>Ideal for <strong>Kubernetes beginners</strong> to experiment with cluster management, node behaviors, and pod lifecycles.</li>
<li>Enables hands-on learning without the complexity of setting up real clusters.</li>
</ul>
<h3>3. <strong>CI/CD Pipelines</strong></h3>
<ul>
<li>Integrate KWOK into <strong>continuous integration/continuous deployment (CI/CD) pipelines</strong> to test Kubernetes manifests, Helm charts, or custom operators.</li>
<li>Simulate <strong>failure scenarios</strong> (e.g., node crashes, network partitions) to validate application robustness.</li>
</ul>
<h3>4. <strong>Research and Experimentation</strong></h3>
<ul>
<li>Researchers can use KWOK to study <strong>Kubernetes behavior at scale</strong> without incurring high costs.</li>
<li>Useful for experimenting with <strong>new Kubernetes features, plugins, or custom controllers</strong> in a controlled environment.</li>
</ul>
<hr />
<h2>How to Get Started with KWOK</h2>
<h3>1. <strong>Installation</strong></h3>
<ul>
<li><strong>Using Binaries</strong>: Download the latest release from the <a href="https://github.com/kubernetes-sigs/kwok">KWOK GitHub repository</a> and add it to your <code>PATH</code>.</li>
<li><strong>Using Docker/Nerdctl</strong>: Pull the pre-built image and run it in a container.</li>
</ul>
<h3>2. <strong>Creating a Cluster</strong></h3>
<ul>
<li>Use <code>kwokctl</code> to create a cluster with simulated nodes:
<pre><code class="language-bash">kwokctl create cluster --name my-cluster
</code></pre>
</li>
<li>Verify the cluster status using <code>kubectl</code>:
<pre><code class="language-bash">kubectl get nodes
</code></pre>
</li>
</ul>
<h3>3. <strong>Simulating Workloads</strong></h3>
<ul>
<li>Deploy pods, deployments, or other Kubernetes resources as you would in a real cluster.</li>
<li>Use <code>kwok</code> to simulate node or pod behaviors (e.g., marking nodes as <code>NotReady</code>).</li>
</ul>
<h3>4. <strong>Customizing Simulations</strong></h3>
<ul>
<li>Configure node properties (e.g., labels, taints) or pod behaviors (e.g., crashes) using YAML files or CLI flags.</li>
<li>Test edge cases by simulating <strong>resource constraints, network issues, or node failures</strong>.</li>
</ul>
<hr />
<h2>Community and Contribution</h2>
<h3>1. <strong>Getting Involved</strong></h3>
<ul>
<li>Join the Kubernetes Slack workspace and participate in:
<ul>
<li><code>#kwok</code> for general usage discussions.</li>
<li><code>#kwok-dev</code> for development-related conversations.</li>
</ul>
</li>
<li>Contribute to the project by:
<ul>
<li>Opening issues or pull requests on the <a href="https://github.com/kubernetes-sigs/kwok">KWOK GitHub repository</a>.</li>
<li>Participating in discussions or reviewing documentation.</li>
</ul>
</li>
</ul>
<h3>2. <strong>Governance</strong></h3>
<ul>
<li>KWOK is part of the <strong>Kubernetes SIGs (Special Interest Groups)</strong> community.</li>
<li>Participation is governed by the <a href="https://github.com/kubernetes/community/blob/master/code-of-conduct.md">Kubernetes Code of Conduct</a>.</li>
</ul>
<hr />
<h2>Limitations and Considerations</h2>
<ul>
<li><strong>Not a Replacement for Real Clusters</strong>: KWOK is designed for <strong>simulation and testing</strong>, not for production workloads.</li>
<li><strong>Limited Real-World Behavior</strong>: While KWOK mimics node and pod behaviors, it may not replicate all real-world scenarios (e.g., hardware failures, network latency).</li>
<li><strong>API Compatibility</strong>: KWOK focuses on Kubernetes API compatibility but may not support all custom resources or third-party integrations.</li>
</ul>
<hr />
<h2>Conclusion</h2>
<p>KWOK is a powerful toolkit for anyone working with Kubernetes who needs to <strong>simulate large-scale clusters efficiently</strong>. Whether you&#8217;re a developer, tester, researcher, or learner, KWOK provides a <strong>low-resource, fast, and flexible</strong> way to experiment with Kubernetes without the overhead of real infrastructure. Its compatibility with existing Kubernetes tools and ease of use make it an invaluable addition to the Kubernetes ecosystem.</p>
<p>L’article <a href="https://xavki.blog/github-kubernetes-sigs-kwok-kubernetes-without-kubelet-simulates-thousands-of-nodes-and-clusters/">GitHub &#8211; kubernetes-sigs/kwok: Kubernetes WithOut Kubelet &#8211; Simulates thousands of Nodes and Clusters.</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/github-kubernetes-sigs-kwok-kubernetes-without-kubelet-simulates-thousands-of-nodes-and-clusters/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mise à jour de la formation kubernetes, c&#8217;est partie !!!</title>
		<link>https://xavki.blog/mise-a-jour-de-la-formation-kubernetes-cest-partie/</link>
					<comments>https://xavki.blog/mise-a-jour-de-la-formation-kubernetes-cest-partie/#respond</comments>
		
		<dc:creator><![CDATA[xavkilinux]]></dc:creator>
		<pubDate>Sat, 05 Oct 2024 12:59:22 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://xavki.blog/?p=1982</guid>

					<description><![CDATA[<p>Cela fait presque 2 ans que je me dis va vraiment falloir que je remette un coup de jeune à la formation sur kubernetes. A n&#8217;en pas douter, je sais qu&#8217;elle est attendue et qu&#8217;elle devrait pas trop mal marcher... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/mise-a-jour-de-la-formation-kubernetes-cest-partie/">Mise à jour de la formation kubernetes, c&#8217;est partie !!!</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Cela fait presque 2 ans que je me dis va vraiment falloir que je remette un coup de jeune à la formation sur kubernetes. A n&#8217;en pas douter, je sais qu&#8217;elle est attendue et qu&#8217;elle devrait pas trop mal marcher et apporter une nouvelle visibilité à la chaine Xavki.</p>



<p>La version précédente a été vu plusieurs centaines de milliers de fois et c&#8217;est donc délicat de renouveler quelque chose que l&#8217;on a déjà fait. Donc on va essayer de donner le meilleur pour donner un coup de boost à la fois technique et pédagogique. Depuis cette précédente version qui date de plus de 4ans, j&#8217;ai pas mal découvert de nouvelles choses et j&#8217;ai aussi pu m&#8217;essayer à former vraiment pas mal de personnes.</p>



<p>Apprendre aux autres à apprendre un technologie et surtout à la comprendre c&#8217;est vraiment une de mes passions fortes. J&#8217;ai la chance d&#8217;avoir pu pratiquer cet exercice devant des publics variés et c&#8217;est là où l&#8217;on apprend soi-même. Comment faire accrocher les gens (je en parle pas de donner envie à des élèves amis plutôt de trouver les mots et l&#8217;angle qui passionera les gens et leur donneront le déclic) et faire en sorte que de doute façon ils perceront par eux-même les plus profonds secrets d&#8217;une techno.</p>



<p>Bref, en cette fin d&#8217;année 2024, je me suis dit &#8220;bon on va remettre ça et on va reposer tout du mieux que l&#8217;on peut&#8221;.</p>



<h2 class="wp-block-heading">Préambule à kubernetes ? pourquoi on en est là ??</h2>



<p>Dans ce cadre j&#8217;ai même décidé de faire une vidéo tutoriel de type préambule. Elle permet de resituer le pourquoi kubernetes en est là de nos jours ? Pourquoi il faut l&#8217;avoir dans sa trousse à outil de devops ?</p>



<p>Certains se serviront de cette formation pour des certifications mais celles-ci ne sont qu&#8217;un projet pour atteindre un objectif : se sentir à l&#8217;aise avec cette technologie pour l&#8217;intégrer dans sa carrière.</p>



<p>Voici donc cette vidéo qui j&#8217;espère vous donnera envie de percer et posera les bases de votre formation pour débuter avec kubernetes.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Kubernetes 000 - Préambule : pourquoi ??" width="625" height="352" src="https://www.youtube.com/embed/KViZkMialxo?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div><figcaption class="wp-element-caption">Pourquoi Kubernetes est un game changer ??</figcaption></figure>



<h2 class="wp-block-heading">Kubernetes avec un peu d&#8217;histoire</h2>



<p>Et donc après avoir posé ces bases, je vous propose de fair eun peu d&#8217;histoire et de comprendre cette communauté autour de kubernetes. Encore une vidéo qui n&#8217;a pas un lien direct dans la technologie mais qui prépare le terrain.</p>



<p>En gros cette seconde vidéo, revient sur les solutions qu&#8217;apporte kubernetes.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Kubernetes 001 - Histoire, contexte et solutions" width="625" height="352" src="https://www.youtube.com/embed/eRH_cetVAck?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div><figcaption class="wp-element-caption">Histoire de Kubernetes</figcaption></figure>



<p>Voici donc pour les deux premières vidéos. Nous y allons tranquillement avec la volonté de bien poser tout cela pour acquérir des compétences solides et ainsi transformer notre carrière.</p>



<p>Car comme je peux vous le dire que l&#8217;on aime ou non kubernetes, il devient et est devenu intégré dans de nombreuses entreprises et ce n&#8217;est pas fini. C&#8217;est ainsi et c&#8217;est pourquoi vous devez en tant que devops, sre, sysadmin oui encore dev acquérir des connaissances je pense.</p>
<p>L’article <a href="https://xavki.blog/mise-a-jour-de-la-formation-kubernetes-cest-partie/">Mise à jour de la formation kubernetes, c&#8217;est partie !!!</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/mise-a-jour-de-la-formation-kubernetes-cest-partie/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Une infrastructure cloud en mode tutoriel de A à Z</title>
		<link>https://xavki.blog/une-infrastructure-cloud-en-mode-tutoriel-de-a-a-z/</link>
					<comments>https://xavki.blog/une-infrastructure-cloud-en-mode-tutoriel-de-a-a-z/#respond</comments>
		
		<dc:creator><![CDATA[xavkilinux]]></dc:creator>
		<pubDate>Fri, 05 Apr 2024 19:41:26 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://xavki.blog/?p=1913</guid>

					<description><![CDATA[<p>Cela fait quelques temps, voir quelques années que je me dis ce serait peut être bien de faire une mise en pratique un peu globale des playlists avec un peu de cloud. Bien sûr en restant modeste, je ne suis... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/une-infrastructure-cloud-en-mode-tutoriel-de-a-a-z/">Une infrastructure cloud en mode tutoriel de A à Z</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Cela fait quelques temps, voir quelques années que je me dis ce serait peut être bien de faire une mise en pratique un peu globale des playlists avec un peu de cloud. Bien sûr en restant modeste, je ne suis pas un cloud builder comme on dit mais ne serait-ce que pour montrer la facilité à se créer une petite infrastructure avec du Terraform et du Ansible.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="576" src="https://xavki.blog/wp-content/uploads/2024/04/Copy-of-infomaniak-1024x576.png" alt="" class="wp-image-1914" srcset="https://xavki.blog/wp-content/uploads/2024/04/Copy-of-infomaniak-1024x576.png 1024w, https://xavki.blog/wp-content/uploads/2024/04/Copy-of-infomaniak-300x169.png 300w, https://xavki.blog/wp-content/uploads/2024/04/Copy-of-infomaniak-768x432.png 768w, https://xavki.blog/wp-content/uploads/2024/04/Copy-of-infomaniak-624x351.png 624w, https://xavki.blog/wp-content/uploads/2024/04/Copy-of-infomaniak.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Je suis tombé dans le cloud public</h2>



<p>Hé bingo !!! J&#8217;ai craqué. <a href="https://www.infomaniak.com/fr">Infomaniak</a> m&#8217;a proposé de bénéficier d&#8217;un compte chez eux et j&#8217;ai cédé à la tentation. L&#8217;idée a été aussi de se dire comment fusionner des choses que j&#8217;ai trouvé intéressantes au cours des dernières années. Genre Consul c&#8217;est un outil bien sympa.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Infrastructure cloud de A à Z - Formation &amp; Tutos chez Infomaniak" width="625" height="352" src="https://www.youtube.com/embed/videoseries?list=PLn6POgpklwWpehxly1wOT6eB2NvZX9A-X" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Au début, je me suis dit ok mais faut pas que ça soit trop couteux en temps. Et puis finalement de fil en aiguille ben là encore j&#8217;ai craqué un peu je pense. Car je me suis dit, pourquoi ne pas refaire le coup de la playlist &#8220;devenir devops&#8221; avec un truc qui explique sommairement chaque outil qui entre en jeu et l&#8217;explication de la conception au fil de la playlist.</p>



<p>Au final, pour le moment on a peut être fait la moitié de l&#8217;infrastructure et on en est à 50 tutoriels cloud.</p>



<p>Mais comme j&#8217;ai pas réussi à trouver quelque chose de similaire sur le web je me suis motiver pour le faire.</p>



<h2 class="wp-block-heading">Et des outils sympas</h2>



<p>Forcément qui dit infrastructure sympa dit outil sympas&#8230; mais ça doit rester efficace et simple (autant que possible).</p>



<p>Alors que va-t-on y trouver ?</p>



<ul class="wp-block-list">
<li>terraform : pour le provisionning</li>



<li>ansible : pour la configuration</li>



<li>openvpn : comme petit vpn</li>



<li>consul : pour plein de choses cool (dns interne, auto-configuration, registry de services&#8230;)</li>



<li>victoriametrics : pour la stack de monitoring (aucune autre ne fait le poids ahaha)</li>



<li>grafana : pour la visualisation des métriques des logs et des traces</li>



<li>karma, alertmanager : pour l&#8217;alerting</li>



<li>vector : pour la collecte des logs (j&#8217;étais partie sur fluentbit mais bon l&#8217;avenir c&#8217;est vector)</li>



<li>loki : pour stocker les logs (on verra pour victorialogs plus tard)</li>



<li>tempo : pour les traces mais c&#8217;est inutile dans notre cas</li>



<li>mattermost : pour avoir notre petit slack perso</li>



<li>postgresql : pour le mattermost (et peut êtr epour le keycloak)</li>



<li>gitlab : pour avoir notre propre isntance et stocker nos codes pour ntore future startup 😉</li>



<li>traefik : pour le routing et les certificats tls Let&#8217;s Encrypt.</li>
</ul>



<p>Et puis, et puis&#8230; kubernetes et son inclusion de manière transparente dans notre infra avec consul-catalog, kube-router etc&#8230;</p>



<p>Bref on va bien se marrer et si vous n&#8217;êtes pas abonné faites-le car ça va swinguer.</p>



<p>La playlist est <a href="https://www.youtube.com/playlist?list=PLn6POgpklwWpehxly1wOT6eB2NvZX9A-X">ici</a> !!!</p>
<p>L’article <a href="https://xavki.blog/une-infrastructure-cloud-en-mode-tutoriel-de-a-a-z/">Une infrastructure cloud en mode tutoriel de A à Z</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/une-infrastructure-cloud-en-mode-tutoriel-de-a-a-z/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VictoriaMetrics : comment réduire à néan prometheus et thanos à la fois :)</title>
		<link>https://xavki.blog/victoriametrics-comment-reduire-a-nean-prometheus-et-thanos-a-la-fois/</link>
					<comments>https://xavki.blog/victoriametrics-comment-reduire-a-nean-prometheus-et-thanos-a-la-fois/#respond</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 17:37:21 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://xavki.blog/?p=1798</guid>

					<description><![CDATA[<p>Il y a encore 3 ans, j&#8217;étais fan de prometheus, thanos et la bande des exporters. Pour les exporters cela reste toujours le cas mais pour la partie stockage, j&#8217;ai trouvé le BON remplaçant d&#8217;une stack qui pourtant fait et... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/victoriametrics-comment-reduire-a-nean-prometheus-et-thanos-a-la-fois/">VictoriaMetrics : comment réduire à néan prometheus et thanos à la fois :)</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Il y a encore 3 ans, j&#8217;étais <strong>fan de prometheus, thanos et la bande des exporters</strong>. Pour les exporters cela reste toujours le cas mais pour la partie stockage, j&#8217;ai trouvé le BON remplaçant d&#8217;une stack qui pourtant fait et a bien fait ses preuves : <a href="https://victoriametrics.com/">VictoriaMetrics</a></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="VictoriaMetrics - 01. Introduction, c&#039;est quoi ??" width="625" height="352" src="https://www.youtube.com/embed/5256wndpyOI?list=PLn6POgpklwWpyvMoihH_AJucst6pR3f8Z" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Partons du contexte actuel</h2>



<p>L&#8217;informatique est un domaine qui explose à vitesse fulgurante. Le web vient juste de prendre +25% de traffic par rapport à l&#8217;année précédente <a href="https://www.theregister.com/2023/12/13/cloudflare_internet_traffic_2023/">selon Cloudflare</a>. Doit-on s&#8217;en réjouir ? pas trop pour l&#8217;avenir de l&#8217;humanité mais c&#8217;est ainsi parfois il faut accepté la fatalité pour tenter de la compenser.</p>



<p>D&#8217;un point de vue impact, +25% sur le traffic ne pose pas de problème direct (réseau&#8230;) et de la part direct de la consommation d&#8217;énergie. Non, c&#8217;est ce que cela déclenche en cascade derrière&#8230; les logs, les métriques&#8230; maintenant les traces&#8230; </p>



<p>Donc non, ce n&#8217;est pas sans impact contrairement à ce que l&#8217;on peut se dire en première lecture. Ajoutons à cela que ce traffic représente qu&#8217;une activité support à l&#8217;industrie de la sur-consommation, bien le signale devrait être presque alarmant.</p>



<p>Bref peu importe, on a fait nos choix de société comme dirait l&#8217;autre.</p>



<h2 class="wp-block-heading">Maintenant zoomons</h2>



<p>La tendance actuelle est à l&#8217;observabilité. Personnellement j&#8217;adore cela mais là encore il faut quand même se poser 2 secondes.</p>



<p>Il faut du monitoring c&#8217;est clair, des logs aussi&#8230; et à nuancer en fonction du besoin.</p>



<p>Des traces, ah là déjà, à l&#8217;échelle globale des entreprises (petites, moyennes et grandes) cela est déjà à nuancer beaucoup plus. Pour certaines oui, pour d&#8217;autres c&#8217;est complètement overkill et c&#8217;est cela pour beaucoup beaucoup d&#8217;entreprises malgré tout.</p>



<p>Finalement, c&#8217;est le rôle premier de l&#8217;Ingénieur de savoir mettre ce qu&#8217;il faut là où il faut (pas plus pas moins).</p>



<p>On pourrait même se dire que pousser à al production en masse de ces métriques, logs et traces ne sert-il pas les producteurs de SaaS. Car les gros volumes posent plus de difficultés à manager.</p>



<p>Donc dans ce contexte, il faut une technologie qui soit disruptive comme on dit&#8230; c&#8217;est à dire qui révolutionne sont domaine d&#8217;une manière ou d&#8217;une autre.</p>



<p>Et c&#8217;est un peu le cas de Victoria Metrics !!!</p>



<h2 class="wp-block-heading">VictoriaMetrics, l&#8217;ovni dans l&#8217;écosystème des métriques</h2>



<p>Alors en guise d&#8217;exemple, je pourrais vous citer plein de chiffres que j&#8217;ai pu découvrir à droite et à gauche (7 fois moins de ram que prometheus, 10 fois moins de stockage que influxdb&#8230;). Mais il suffit de regarder <a href="https://docs.victoriametrics.com/CaseStudies.html">les profils des entreprises utilisatrices </a>pour bien comprendre que la performance n&#8217;est pas un problème et même totalement sont point fort.</p>



<p>A titre perso, il suffit simplement de me dire que victoriametrics <a href="https://altinity.com/wp-content/uploads/2021/11/How-ClickHouse-Inspired-Us-to-Build-a-High-Performance-Time-Series-Database.pdf">s&#8217;est inspiré de l&#8217;architecture de clickhouse</a> pour se spécialiser encore plus dans la métrique et je suis convaincu direct. J&#8217;ai pratiqué clickhouse <a href="https://clickhouse.com/docs/en/about-us/adopters">mais regardez ce tableau</a> et vous comprendrez que l&#8217;on est là aussi sur un ovni.</p>



<p>Alors la perf c&#8217;est bien mais souvent ça fini en truc pas facile à manager et maintenir pour de petites entreprises ou des boites moins tech, ne disposant pas des compétences (en nombre, en finance, en connaissances&#8230;).</p>



<p>Ben c&#8217;est là où c&#8217;est finalement encore plus magique.</p>



<p>VictoriaMetrics dispose de 2 modes :</p>



<ul class="wp-block-list">
<li>le single binaire avec un all in one qui permet à la fois de lire, écrire et stocker sans réfléchir et avec des performances déjà assez folles pour de très très nombreuses entreprises (l&#8217;idée est de vous dissuader de passer au mode extrème pour rien).</li>



<li>le mode cluster&#8230; en microservices. Un binaire pour chaque fonction : lecture, écriture, stockage etc&#8230; Ce mode permet en plus de la haute disponibilité avec des performances de dingos.</li>
</ul>



<p>Attention edit : à nuancer il ne permet pas une haute dispo complète. VictoriaMetrics ne permet pas la perte d&#8217;un serveur ou des disks. Il faut avoir accès à du stockage distribué pour le moment ou mettre en place les backups pour accepter une restauration (une perte de données sera certainement possible).</p>



<p>&#8230; à côté ils ont aussi un mode SaaS managé si vous le souhaitez.</p>



<p>Et permettre ces choix est fondamental je trouve.</p>



<p>Donc vous l&#8217;avez compris, pour moi, VictoriaMetrics permet de mitiger les problèmes cités en début d&#8217;article.</p>



<h2 class="wp-block-heading">Et VictoriaMetrics relève des défis jamais creusés</h2>



<p>Premier défi c&#8217;est l&#8217;interropérabilité comme certaines personnes. A savoir, la possibilité de prendre différents formats en entrée comme : </p>



<ul class="wp-block-list">
<li>openmetrics</li>



<li>influxdb</li>



<li>graphite</li>



<li>http</li>



<li>csv</li>



<li>&#8230;</li>
</ul>



<p>Second défi, les grandes cardinalités, vous savez le multiplicateur qui fait que l&#8217;on peut éclater un prometheus sans forcer. A savoir les différentes combinaisons des labels et nom des métriques qui augmentent considérablement le nombre de données à brasser pour obtenir des résultats et les stocker facilement :</p>



<p class="has-text-align-center"><em>&lt;métrique&gt; x &lt;label1&gt; x &lt;label2&gt; x &lt;label3&gt; x &#8230; x &lt;labeln&gt;</em></p>



<p>A ce jeu c&#8217;est de loin le plus fort encore une fois.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Voici donc pour la présentation. Vous pouvez le retrouver sur la chaine Xavki ou <a href="https://xavki.blog/victoriametrics-tutoriels-pour-debuter-francais/">sur cette page en mode tutoriels</a>. Et la bonne news finale c&#8217;est aussi que victoriametrics travaille <a href="https://victoriametrics.com/products/victorialogs/">sur VictoriaLogs boom</a> !!!</p>
<p>L’article <a href="https://xavki.blog/victoriametrics-comment-reduire-a-nean-prometheus-et-thanos-a-la-fois/">VictoriaMetrics : comment réduire à néan prometheus et thanos à la fois :)</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/victoriametrics-comment-reduire-a-nean-prometheus-et-thanos-a-la-fois/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Infrastructure automatisée et des services fondamentaux</title>
		<link>https://xavki.blog/infrastructure-automatisee-et-des-services-fondamentaux/</link>
					<comments>https://xavki.blog/infrastructure-automatisee-et-des-services-fondamentaux/#respond</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Thu, 16 Nov 2023 20:01:21 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://xavki.blog/?p=1700</guid>

					<description><![CDATA[<p>Si vous avez suivi le dernier live, vous savez peut être sur quoi je travaille en ce moment : un projet de squelette d&#8217;infrastructure. Rien de fou mais juste un assemblage de ce que j&#8217;ai vu de mieux dans mes... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/infrastructure-automatisee-et-des-services-fondamentaux/">Infrastructure automatisée et des services fondamentaux</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Si vous avez suivi le dernier live, vous savez peut être sur quoi je travaille en ce moment : un projet de squelette d&#8217;infrastructure.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Présentation du projet - Template Infrastructure" width="625" height="352" src="https://www.youtube.com/embed/Uw5xhyqBUew?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Rien de fou mais juste un assemblage de ce que j&#8217;ai vu de mieux dans mes expériences professionnelles précédentes et aussi ma veille. Cela ne veut pas dire que c&#8217;est le mieux mais disons que ça permet de se faire une idée sur les choses et d&#8217;en discuter.</p>



<p>Bien sûr l&#8217;objectif va être de vous partager cela sous forme de tutoriels avec une approche pas à pas comme d&#8217;habitude à la fois sur la manière dont les choses sont pensées et sur les minimum requis pour les outils utilisés.</p>



<p>Et pour le moment, il y a déjà pas mal d&#8217;outils dans cette infrastructure :</p>



<ul class="wp-block-list">
<li>openvpn : pour ne pas accéder à ces machines via des ip publiques</li>



<li>terraform : pour le provisionning</li>



<li>ansible : pour la configuration </li>



<li>openstack : pour son utilisation (merci à infomaniak)</li>



<li>consul : la registry des serveurs et services fournissant les dns et l&#8217;auto-configuration de traefik</li>



<li>traefik : le reverse-proxy français et qui gère le Let&#8217;s Encrypt</li>



<li>victoriametrics : le stockage de métriques le plus performant du secteur</li>



<li>loki : pour la centralisation de logs</li>



<li>tempo : pour la centralisation des traces</li>



<li>grafana : pour al visualisation</li>



<li>gitlab : pour le dépôt de code et bien plus (on déploie bien sûr une instance auto-hébergée)</li>



<li>alertmanager/karma : pour l&#8217;alerting généré par vmalert</li>
</ul>



<p>Et encore beaucoup d&#8217;autres choses à venir (webmail, chat, wiki&#8230;).</p>



<p>Donc vous comprenez pourquoi pour le moment on me voit moins sur la chaine mais pour autant je me tourne vraiment pas les pouces.</p>



<p>Bref, comme toujours cela est venu d&#8217;un truc qui m&#8217;a tourné dans la tête. Pourquoi on ne trouve pas ce genre de chose sur le web. Pourquoi pas de tutos alors que plein de gens seraient 10k fois mieux placés à réaliser ce type de projet. Mieux certaines sociétés y trouveraient un intérêt financier. Je pense que c&#8217;est là où parfois l&#8217;opensource se perd.</p>



<p>Alors tout cela arrive très bientôt. Laissez moi juste le temps pour affiner tout cela est en faire un rendu correct.</p>



<p>Quelques copies d&#8217;écrans</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="514" src="https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-22-57-1024x514.png" alt="" class="wp-image-1701" srcset="https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-22-57-1024x514.png 1024w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-22-57-300x151.png 300w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-22-57-768x386.png 768w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-22-57-1536x772.png 1536w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-22-57-624x314.png 624w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-22-57.png 1855w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="514" data-id="1703" src="https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-23-25-1024x514.png" alt="" class="wp-image-1703" srcset="https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-23-25-1024x514.png 1024w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-23-25-300x151.png 300w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-23-25-768x386.png 768w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-23-25-1536x772.png 1536w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-23-25-624x314.png 624w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-23-25.png 1855w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="514" data-id="1702" src="https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-25-18-1024x514.png" alt="" class="wp-image-1702" srcset="https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-25-18-1024x514.png 1024w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-25-18-300x151.png 300w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-25-18-768x386.png 768w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-25-18-1536x772.png 1536w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-25-18-624x314.png 624w, https://xavki.blog/wp-content/uploads/2023/11/Screenshot-from-2023-11-16-20-25-18.png 1855w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p>Donc abonnez-vous à la chaine si ce n&#8217;est pas déjà fait car lorsque ça va sortir ça va être bien sympa j&#8217;espère !!!</p>
<p>L’article <a href="https://xavki.blog/infrastructure-automatisee-et-des-services-fondamentaux/">Infrastructure automatisée et des services fondamentaux</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/infrastructure-automatisee-et-des-services-fondamentaux/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Les tutos pour débuter avec Zabbix c&#8217;est partie !!!</title>
		<link>https://xavki.blog/les-tutos-pour-debuter-avec-zabbix-cest-partie/</link>
					<comments>https://xavki.blog/les-tutos-pour-debuter-avec-zabbix-cest-partie/#respond</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Fri, 25 Aug 2023 19:55:52 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[zabbix]]></category>
		<guid isPermaLink="false">https://xavki.blog/?p=1646</guid>

					<description><![CDATA[<p>Zabbix, vous avez été très très nombreux à me le réclamer. Jusqu&#8217;ici je n&#8217;avais pas tenté de faire de tutos dessus car je ne pense pas être la meilleure personne pour le faire. Dans mon cadre professionnel, j&#8217;ai plus contribuer... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/les-tutos-pour-debuter-avec-zabbix-cest-partie/">Les tutos pour débuter avec Zabbix c&#8217;est partie !!!</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Zabbix, vous avez été très très nombreux à me le réclamer. Jusqu&#8217;ici je n&#8217;avais pas tenté de faire de tutos dessus car je ne pense pas être la meilleure personne pour le faire. Dans mon cadre professionnel, j&#8217;ai plus contribuer à désinstaller des zabbix (souvent d&#8217;anciennes générations) que d&#8217;en installer &#8220;from scratch&#8221; comme on dit.</p>



<p>Mais voilà, vous avez su insister, Zabbix a aussi bien évolué et faire une &#8220;formation&#8221; permettrait au moins de mieux pouvoir soutenir les points de comparaisons avec d&#8217;autres outils déjà présents sur la chaine. Comme par exemple <a href="https://xavki.blog/prometheus-grafana-tutoriaux-francais/">prometheus</a> que vous pouvez déjà retrouver dans une playlist de presque 60 tutos gratuits (et bientôt VictoriaMetrics qui me parait tellement porteur).</p>



<p>Donc nous voici partie pour plusieurs vidéos Zabbix pour les débutants dont je fais partie. Aujourd&#8217;hui nous <a href="https://xavki.blog/zabbix-tutoriels-francais/">découvrirons Zabbix</a> c&#8217;est quoi, quelques définitions à connaître et enfin l&#8217;installation d&#8217;un serveur.</p>



<h2 class="wp-block-heading">C&#8217;est quoi Zabbix ?</h2>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Zabbix : Introduction, c&#039;est quoi ???" width="625" height="352" src="https://www.youtube.com/embed/WPnFDjf56XA?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Zabbix a été créé en Alexei Vladishev avec une toute première version en 2001. S&#8217;en est suivi la création d&#8217;une société du même nom en 2005. Cela n&#8217;empêche pas Zabbix d&#8217;être un outil de <strong>monitoring opensource</strong>, principalement basé sur du C et du php.</p>



<p>A la différence de prometheus qui est principalement un moteur de base de données et de règles avec une interface graphique rudimentaire (on se penche toujours vers grafana pour disposer d&#8217;une interface graphique), Zabbix lui ne dispose pas de base de données mais permet de se connecter à mariadb, postgresql et d&#8217;autres. En revanche Zabbix c&#8217;est un ensemble de service dont un serveur responsable du stockage avec l&#8217;outil de base de données choisi et aussi une interface graphique&#8230; bien sûr on y retrouve de nombreux services de types monitoring : alerting, templating, dashboard, découvertes de serveurs à monitorer, proxies&#8230;</p>



<p>Bien sûr vous pouvez retrouver les classiques :</p>



<ul class="wp-block-list">
<li>le github : <a href="https://github.com/zabbix/zabbix">https://github.com/zabbix/zabbix</a></li>



<li>le site officiel : <a href="https://www.zabbix.com/">https://www.zabbix.com/</a></li>
</ul>



<p>Et petit clin d&#8217;oeil à Steve si vous être en France : </p>



<ul class="wp-block-list">
<li>la société IZI-IT sépcialiste de Zabbix : <a href="https://izi-it.io/">https://izi-it.io/</a></li>



<li>et le channel discord zabbix france : <a href="https://discord.com/invite/hvauXEQ">https://discord.com/invite/hvauXEQ</a></li>
</ul>



<p>Pour ce qui est des tutos zabbix et des éléments de support qui vont avec vous les retrouverez ici :</p>



<ul class="wp-block-list">
<li><a href="https://gitlab.com/xavki/tutoriels-zabbix/">dépôt gitlab xavki</a></li>



<li><a href="https://xavki.blog/zabbix-tutoriels-francais/">playlist youtube zabbix</a></li>
</ul>



<p>Zabbix fonctionne sur la plupart des système d&#8217;exploitation, vous ne devriez pas avoir de problème de ce côté là.</p>



<p>Les principaux concurrents de Zabbix :</p>



<ul class="wp-block-list">
<li>prometheus</li>



<li>nagios</li>



<li>centreon</li>



<li>victoria metrics</li>



<li>&#8230;</li>
</ul>



<p>Néanmoins à la différence de prometheus, Zabbix fonctionne en mode push c&#8217;est à dire que des agents envoient leurs données sur el serveur central (prometheus lui va chercher la donnée en la scrapant).</p>



<h2 class="wp-block-heading">Quelques définitions et concepts</h2>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Zabbix : Concepts &amp; définitions" width="625" height="352" src="https://www.youtube.com/embed/emaVfN1wPz0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>J&#8217;aime bien faire cela dans un peu toutes les playlists, poser les définitions. J&#8217;espère ne pas dénaturer les choses en simplifiant mais cela permet à toutes et à tous d&#8217;utiliser le même langage dans la suite des vidéos.</p>



<ul class="wp-block-list">
<li>le serveur : c&#8217;est lui qui a la charge de gérer la base de données (mysql, mariadb, postgresql, oracle&#8230;) et la plupart des processus de calculs.</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li>le frontend : avec soit un apache ou un nginx, le frontend permet de fournir l&#8217;interface graphique en communiquant avec le serveur (backend).</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li>les agents : actif ou non (on verrra cela plus tard), ils ont la charge de collecter les métriques sur les serveurs cibles (généralement par le biais de scripts), on peut aussi parler de sonde Zabbix.</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li>une macro : terme un peu trompeur qui est finalement une variable générique, par exemple <code>{$HOSTNAME}</code>.</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li>le Low Level Discovery (LLD) : mécanisme de découverte d&#8217;éléments à monitorer (par exemple des interfaces réseaux)</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li>un template : terme un peu trompeur car il englobe l&#8217;ensemble des éléments pouvant être générique et contenant des variables, par exemple les métriques collectées pour un profil de host (linux ou autre&#8230;). Ces templates permettent de configurer zabbix sur certains aspects une seule fois sans avoir à répéter pour chaque cible l&#8217;opération.</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li>un trigger : seuil pour une métrique qui déclenchera une action.</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li>un webhook : une action d&#8217;envoi d&#8217;un signal vers une applicatif externe.</li>
</ul>



<p></p>



<ul class="wp-block-list">
<li>le proxy zabbix : agent intermédiaire spécialisé dans la collecte de métrique sur des devices ne pouvant pas accueillir un agent standard.</li>
</ul>



<h2 class="wp-block-heading">Installation du serveur Zabbix couplé à un serveur Postgresql</h2>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Zabbix - 03. Installation du serveur" width="625" height="352" src="https://www.youtube.com/embed/9J7wouS2mOg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Alors comme nous l&#8217;avons évoqué plus haut dans cet article, nous allons utiliser Postgresql avec Zabbix. Il va donc falloir dans un premier temps installer un serveur postgresql. Dans l&#8217;idéal et dans un environnement de production, il faudrait avoir de la haute disponibilité ou au moins avoir des backups sérieux pour éviter trop de perte de données en cas de crash de la base de données.</p>



<p>Passons donc à l&#8217;installation de postgresql :</p>



<p><code>apt install -y postgresql <br>pg_ctlcluster 14 main start</code></p>



<p>Ensuite on va créer le user et la database :</p>



<p><code>sudo -u postgres psql -c "create database zabbix;" <br>sudo -u postgres psql -c "create user zabbix with password 'password';" <br>sudo -u postgres psql -c "grant ALL privileges on database zabbix to zabbix;"</code></p>



<p>Puis nous allons permettre la connexion depuis l&#8217;extérieur :</p>



<p><code>echo "listen_addresses = '*'" &gt;&gt; /etc/postgresql/14/main/postgresql.conf</code><br><code>echo "host zabbix all 192.168.0.1/16 md5" &gt;&gt; /etc/postgresql/14/main/pg_hba.conf</code><br><code>systemctl restart postgresql</code></p>



<p>Donc avec ça on peut à la fois utiliser un serveur postgres externe ou sur la même machine. Dans mon cas, je vais utiliser un serveur externe.</p>



<p>Maintenant passons à l&#8217;installation du serveur zabbix :</p>



<p><code>wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb<br>sudo dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb sudo apt update -qq 2&gt;&amp;1 &gt;/dev/null<br>sudo apt install -y zabbix-server-pgsql zabbix-frontend-php php8.1-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent postgresql-client<br>zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | PGPASSWORD="password" psql -h zpg1 -U zabbix zabbix<br>sed -i s/"#.*server_name.*"/" server_name zabbix.xavki; "/g /etc/zabbix/nginx.conf<br>echo "DBPassword=password" &gt;&gt; /etc/zabbix/zabbix_server.conf echo "DBHost=zpg1" &gt;&gt; /etc/zabbix/zabbix_server.conf<br>systemctl restart zabbix-server zabbix-agent nginx php8.1-fpm<br>systemctl enable zabbix-server zabbix-agent nginx php8.1-fpm</code></p>



<p>Dans mon cas de figure, le dns utilisé est <code>zabbix.xavki</code>. La base de données se situe sur le serveur zpg1. Vous pouvez donc ouvrir votre navigateur et vous rendre sur cette url.</p>



<p>Il vous restera ensuite à confirmer les coordonnées de la base de données au frontend.</p>
<p>L’article <a href="https://xavki.blog/les-tutos-pour-debuter-avec-zabbix-cest-partie/">Les tutos pour débuter avec Zabbix c&#8217;est partie !!!</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/les-tutos-pour-debuter-avec-zabbix-cest-partie/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Attach ou Exec ???</title>
		<link>https://xavki.blog/attach-ou-exec/</link>
					<comments>https://xavki.blog/attach-ou-exec/#respond</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Sat, 22 Jul 2023 16:25:52 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://xavki.blog/?p=1634</guid>

					<description><![CDATA[<p>Il y a quelques années j&#8217;ai eu la chance de me poser un peu plus de questions sur docker et c&#8217;est grâce à vous et à la chaine Xavki. Eh oui faire des vidéos permet de faire de la recherche... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/attach-ou-exec/">Attach ou Exec ???</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Il y a quelques années j&#8217;ai eu la chance de me poser un peu plus de questions sur docker et c&#8217;est grâce à vous et à la chaine Xavki. Eh oui faire des vidéos permet de faire de la recherche de manière un peu différente. Par exemple quand on se forme à une technologie, on regarde des choses assez générique et ensuite on progresse grâce au debug. Du coup souvent on se forme à travers de besoin sépcifique.</p>



<p>Avec <a href="https://xavki.blog/docker-tutoriaux-francais/">la production d&#8217;un tutoriel docker</a>, je me suis posé un peu plus de question&#8230; Mais quelle est la différence entre docker attach et docker exec ? Est-ce que cette différence est importante ??</p>



<p>FInalement, je considère cette différence comme peu importante&#8230;  si ce n&#8217;est qu&#8217;elle permet de mieux comprendre comment on interagit avec docker (ou d&#8217;autres outils comme podman). Et ça c&#8217;est cool !!!</p>



<p>Bon venons-en justement à ce sujet.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="🧐 Docker exec vs attach ??!!" width="625" height="352" src="https://www.youtube.com/embed/Cx0BNPsPmoU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Docker exec il fait quoi ?</h2>



<p>La commande exec de docker est souvent utilisé par les débutants et perso c&#8217;est celle que je préfère. Mais finalement ques-ce qui se passe derrière ?</p>



<p>Si vous voulez trouver un bon article plus détaillé, je vous invite à lire cette article : <a href="https://iximiuz.com/en/posts/containers-101-attach-vs-exec/">Containers 101: attach vs. exec &#8211; what&#8217;s the difference?</a></p>



<p>Alors si vous avez suivi les tutoriels docker précédents, cela est assez simple à comprendre. Souvenez vous pour débuter nous avions vu la notion de namespaces réseau notamment. </p>



<p>Ces namespaces permettent de faire tourner un processus linux dans un environnement donné et précis (réseau, hostname, user, montage&#8230;). </p>



<p>Et là où le exec est magique c&#8217;est que cette commande ne fait que créer un second conteneur&#8230; dans exactement le même contexte (environnement). Ainsi, on a vraiment l&#8217;impression d&#8217;être dans le conteneur comme l&#8217;on dit souvent. Du coup c&#8217;est un abus de langage car on est à côté dans un autre conteneur mais juste dans le même réseau, le même hostname, user&#8230;</p>



<p>Donc ça c&#8217;est pour le docker exec&#8230; Passons à docker attach qui peut plaire aux fans de linux :).</p>



<h2 class="wp-block-heading">Docker attach le man in the middle du conteneur !!!</h2>



<p>Attach lui est assez marrant. Sur un processus donné sous linux, vous disposez de stdin, stdout, stderr&#8230; d&#8217;ailleurs vous pouvez les retrouver dans /proc sous les identifiants de vos processus. En gros c&#8217;est la libIO de linux qui permet de gérer ces flux.</p>



<p>Le conteneur c&#8217;est un processus comme un autre sur votre machine. Il dispose donc de ses propres flux précités.</p>



<p>Imaginez donc que vous soyez en mesure d&#8217;écouter le stdout du conteneur&#8230; Vous seriez en mesure de voir les sorties du processus du conteneur. </p>



<p>Imaginez également que vous soyez connecté à stdin du conteneur (processus)&#8230; idem vous seriez en mesure d&#8217;envoyer des commandes au processus de ce conteneur&#8230; </p>



<p>Bingo c&#8217;est docker attach, il permet de streamer tout ce qui sort et tout ce qui rentre dans le processus du conteneur docker.</p>



<p>Donc la finalité de attach ou de exec est à peu près la même pour debuguer, tester etc. Les méthodes sont par contre assez différentes. A vous de choisir la votre.</p>
<p>L’article <a href="https://xavki.blog/attach-ou-exec/">Attach ou Exec ???</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/attach-ou-exec/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Création d&#8217;une image docker: principes et bonnes pratiques</title>
		<link>https://xavki.blog/creer-image-docker-bonnes-pratiques/</link>
					<comments>https://xavki.blog/creer-image-docker-bonnes-pratiques/#respond</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Tue, 30 May 2023 15:43:39 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://xavki.blog/?p=1628</guid>

					<description><![CDATA[<p>Lors des tutoriels précédents pour débuter docker, nous avions vu le lancement de conteneurs à partir d&#8217;images déjà existantes. Ces images sont stockées sur ce que l&#8217;on appelle des registries. C&#8217;est une sorte de dépôt pour stocker des images de... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/creer-image-docker-bonnes-pratiques/">Création d&#8217;une image docker: principes et bonnes pratiques</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Lors des tutoriels précédents <a href="https://xavki.blog/docker-tutoriaux-francais/">pour débuter docker</a>, nous avions vu le lancement de conteneurs à partir d&#8217;images déjà existantes. Ces images sont stockées sur ce que l&#8217;on appelle des registries. C&#8217;est une sorte de dépôt pour stocker des images de type OCI (Open Container Initiative).</p>



<p>Mais finalement comment créer une image docker ? Quelles bonnes pratiques mettre en oeuvre ?</p>



<h2 class="wp-block-heading">Créer une image par un commit de conteneur, c&#8217;est possible ??!!</h2>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Docker : créer une image par commit (sans Dockerfile)" width="625" height="352" src="https://www.youtube.com/embed/f4gImcCeVWU?start=14&#038;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Alors autant le dire tout de suite c&#8217;est possible mais ce n&#8217;est pas une grande idée. En effet, comme nous allons le voir par la suite il vaut mieux privilégier les Dockerfile. Ces fichiers descriptifs de la constitution d&#8217;une image permettent de les créer et s&#8217;agissant de fichiers, on peut donc les gitter et ainsi les versionner et les partager. Ce n&#8217;est pas le cas avec les commit de conteneurs.</p>



<p>Néanmoins, cela reste très intéressant de savoir que l&#8217;on peut partir d&#8217;un conteneur docker pour créer une image. Parfois, cela peut même vous enlever une sacrée épingle du pied.</p>



<p>Alors comment faire ?</p>



<p>Vous devez vous en douter, la CLI de docker va nous fournir une commande magique : <a href="https://docs.docker.com/engine/reference/commandline/commit/">docker commit</a>.</p>



<p>Donc partons d&#8217;un conteneur existant :</p>



<p><code>docker run -d --name c1 nginx:latest</code></p>



<p>Puis on va faire une modification anodine dedans : </p>



<p><code>docker exec -ti c1 bash<br>touch /xavki.txt</code></p>



<p>Maintenant resortons du conteneur puis créons une image à l&#8217;aide de la commande docker commit. Pour cela, il nous faut l&#8217;id du conteneur et on définira un nom d&#8217;image et un tag.</p>



<p><code>docker commit &lt;id_conteneur&gt; &lt;nom_image:tag_image&gt;</code><br><code>docker commit a5zea5ef myimage:v1.0.0</code></p>



<p>Et maintenant vous pouvez vérifier que votre moteur docker local trouve bien cette nouvelle image docker avec un docker ps.</p>



<p>Puis vous pouvez lancer un nouveau conteneur avec cette image :</p>



<p><code>docker run -d --name c2 myimage:v1.0.0</code></p>



<p>Et vous rendre dedans pour lancer un ls du fichier que nous avions créé dansnotre conteneur c1 et donc présent de base dans notre nouvelle image.</p>



<p><code>docker exec -ti c1 ls /xavki.txt</code></p>



<p>Bingo !!! Vous venez de créer votre première image docker !!!</p>



<p>Comme je vous disez il vaut mieux utiliser le Dockerfile mais néanmoins docker commit est assez pratique : </p>



<ul class="wp-block-list">
<li>pour débuguer</li>



<li>pour tester</li>



<li>pour recréer une image quand on a perdu le Dockerfile</li>



<li>&#8230; bref pour bidouiller</li>
</ul>



<p>Mais le mieux reste le Dockerfile</p>



<h2 class="wp-block-heading">Layers d&#8217;une image docker</h2>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Les layers Docker, c&#039;est quoi ?" width="625" height="352" src="https://www.youtube.com/embed/_iUjrWhzx9o?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Les images docker repose sur le principe de base des images et des conteneurs : le Copy On Write</p>



<p>C&#8217;est quoi ce truc ??</p>



<p>Considérons qu&#8217;une image pour être crée doit se faire au fur et à mesure d&#8217;instruction (cf ci-dessous avec le Dockerfile). Au fur et à mesure que l&#8217;on joue ces instructions on empile des couches successivent, les unes sur les autres.</p>



<p>C&#8217;est ce que l&#8217;on appelle les layers. Une fois que l&#8217;on a dit se principe il est facile de comprendre une différence importante entre une image et un conteneur d&#8217;un point de vue filesystème (en plus du principe de base de processus que l&#8217;on a déjà vu précédemment).</p>



<p>Une image docker est une succession de couches en Lecture seule. Et un conteneur est un layer en écriture sur ces couches en lecture. D&#8217;où le docker commit qui est finalement la validation (le commit) de cette couche en écriture pour le rendre en lecture seul et ainsi constituer une image.</p>



<p>Pour mieux s&#8217;en rendre compte il existe une commande peu utilisé : docker diff &lt;nom_conteneur&gt;. Avec cette commande lancé sur un conteneur vous pourrez voir les modifications qui votn être commitées. Magique ;).</p>



<h2 class="wp-block-heading">Comment créer une image docker avec un Dockerfile ?</h2>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Docker : Le Dockerfile et ses instructions" width="625" height="352" src="https://www.youtube.com/embed/BUJAI1ptUu8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Alors une fois que l&#8217;on a dit cela on se dit ok mais c&#8217;est quoi ces instructions ? C&#8217;est la que l&#8217;on retrouve le Dockerfile (avec un D majuscule hein 😉 ).</p>



<p>Un dockerfile c&#8217;est un fichier plat avec en début de ligne une instruction écrite en majuscule puis un espace suivi de ces paramètres par exemple :</p>



<p><code>RUN apt install -y git</code></p>



<p>Donc maintenant voyons les principales instructions que vous pouvez retrouver facilement <a href="https://docs.docker.com/engine/reference/builder/">dans la documentation docker ici</a> :</p>



<ul class="wp-block-list">
<li>RUN : lancer des commandes shell</li>



<li>FROM déclarer une image source</li>



<li>ARG déclarer une variable utilisable uniquement durant le build docker</li>



<li>ENV : délcarer une variable d&#8217;environnement utilisable durant le build et lors de l&#8217;utilisation du conteneur</li>



<li>COPY : pour copier des fichiers et des répertoires de l&#8217;extérieur de l&#8217;image (ou d&#8217;une autre image) dans l&#8217;image en cours de création</li>



<li>ADD : idem COPY mais avec la possiblité de télécharger des documents par url</li>



<li>CMD : définitions des options de la commandes principales du conteneurs (processus du conteneur)</li>



<li>ENTRYPOINT : définition de la commande principale du conteneur issu de l&#8217;image</li>
</ul>



<p>Par exemple : </p>



<pre class="wp-block-code"><code>FROM python@sha256:2659ee0e84fab5bd62a4d9cbe5b6750285e79d6d6ec00d8e128352dad956f096

# Labels
LABEL version=v1.0.0
LABEL owner=xavki-app

# Env vars
ENV FLASK_APP=app.py
ENV FLASK_ENV=dev

ARG APP_USER=xavki

# Create a dedicated user

RUN adduser -D ${APP_USER}

# Directory
WORKDIR /app

# Copy &amp; install requirements
RUN apk add --no-cache curl=8.0.1-r0

USER ${APP_USER}:${APP_USER}
COPY --chown=xavki  requirements.txt requirements.txt
RUN pip3 install --no-cache-dir -r requirements.txt

# Copy all files
COPY --chown=xavki . .

# Expose port
EXPOSE 5000

CMD &#91;"python", "-m", "flask", "run", "--host=0.0.0.0"]</code></pre>



<h2 class="wp-block-heading">Et je vous propose de mettre en place de bonnes pratiques pour créer vos images docker</h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://xavki.blog/wp-content/uploads/2023/05/Docker-15-pratiques-dockerfile-1024x576.png" alt="" class="wp-image-1631" srcset="https://xavki.blog/wp-content/uploads/2023/05/Docker-15-pratiques-dockerfile-1024x576.png 1024w, https://xavki.blog/wp-content/uploads/2023/05/Docker-15-pratiques-dockerfile-300x169.png 300w, https://xavki.blog/wp-content/uploads/2023/05/Docker-15-pratiques-dockerfile-768x432.png 768w, https://xavki.blog/wp-content/uploads/2023/05/Docker-15-pratiques-dockerfile-1536x864.png 1536w, https://xavki.blog/wp-content/uploads/2023/05/Docker-15-pratiques-dockerfile-624x351.png 624w, https://xavki.blog/wp-content/uploads/2023/05/Docker-15-pratiques-dockerfile.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Choisir une image légère &amp;&amp; minimalist (multistage plus tard)</li>



<li>Définir précisément le tag de image ou le digest</li>



<li>Suppression des caches APT, APK… &amp;&amp; /var/cache/xxx</li>



<li>Grouper les layers (surtout pour les installations et utiliser &amp;&amp; )</li>



<li>Utiliser .dockerignore (secrets, fichiers sensibles et inutiles…)</li>



<li>Utiliser plutôt COPY à la place de ADD (datas exterieures)</li>



<li>Créer un utilisateur par défaut</li>



<li>Utiliser cet utilisateur aux bons endroits USER &amp;&amp; CMD</li>



<li>Supprimer éventuellement des éléments installés (avec précision)</li>



<li>Eviter à tout prix le tag latest</li>



<li>Vérifier le FROM (registries vérifiées, image maintenue, contrôle des couches)</li>



<li>Ou pousser ? registry publique ou privée</li>



<li>Eviter le monolith : bases de données + apps + statics…</li>



<li>Utiliser un linter (hadolint, clair&#8230;) &#8211; docker run &#8211;rm -i hadolint/hadolint &lt; Dockerfile</li>



<li>Ne pas pousser des secrets dedans (mot de passe, clefs, certificats…)</li>



<li>Variabiliser qunad même…</li>



<li>Eviter les outils de debug qui souvent sont néfastes pour la sécu (telnet, tcpdump, netcat…)</li>



<li>Définir des règles sur les labels (standardiser: équipes, langage, version…)</li>



<li>Vérifier la vulnérabilité (Clair, Falco…)</li>



<li>Méfiez vous des COPY vraiment…</li>



<li>Définir un WORKDIR</li>



<li>Vérifier la possiblité du multistage-build</li>



<li>Versionner c&#8217;est bien… et maintenir c&#8217;est mieux !!!</li>
</ul>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Dockerfile : 25 bonnes pratiques" width="625" height="352" src="https://www.youtube.com/embed/rVJMH9iuelA?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Mais quand même la commande pour créer notre image ??</h2>



<p>Alors on a un dockerfile mais comment créer une image ?</p>



<p>C&#8217;est très simple avec docker build. Cette commande est assez magique et contient notamment de très bonnes fonctionnalités de cache par défaut pour éviter de reconstruire certains layers déjà existants.</p>



<p>Basiquement on peut lancer :</p>



<p><code>docker build -t myimage:v.1.0.0 .</code></p>



<p>Et voilà !!! Vous avez maintenant localement votre image myimage avec le tag v1.0.0</p>



<p>Et bien sûr pour découvrir les plus de 1500 tutos, <a href="https://www.youtube.com/@xavki">rendez-vous sur la chaine Xavki</a></p>
<p>L’article <a href="https://xavki.blog/creer-image-docker-bonnes-pratiques/">Création d&#8217;une image docker: principes et bonnes pratiques</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/creer-image-docker-bonnes-pratiques/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Bridge, namespaces et vethernet comme docker0</title>
		<link>https://xavki.blog/bridge-namespaces-et-vethernet-comme-docker0/</link>
					<comments>https://xavki.blog/bridge-namespaces-et-vethernet-comme-docker0/#respond</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Wed, 19 Apr 2023 19:05:27 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://xavki.blog/?p=1619</guid>

					<description><![CDATA[<p>Souvent quand on introduit docker, on le présente comme un outil qui utilise des fonctionnalités de Linux : les cgroups et les namespaces&#8230; Je sais je l&#8217;ai fait plusieurs fois sur la chaine Xavki. Bon c&#8217;est bien et ça buzz... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/bridge-namespaces-et-vethernet-comme-docker0/">Bridge, namespaces et vethernet comme docker0</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Souvent quand on introduit docker, on le présente comme un outil qui utilise des fonctionnalités de Linux : les cgroups et les namespaces&#8230; Je sais je l&#8217;ai fait plusieurs fois sur la chaine Xavki. Bon c&#8217;est bien et ça buzz bien mais bon si on montre jamais comment ça marche on passe à côté d&#8217;un truc. Aujourd&#8217;hui on va comprendre comment docker simplifie les choses avec son bridge Docker0.</p>



<p>Eh oui on va installer un bridge, 2 namespaces et 2 vethernets.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Linux 😍 : bridge + network namespaces + vethernet .... manuellement façon Docker" width="625" height="352" src="https://www.youtube.com/embed/0IHvrb4704Y?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Alors le but c&#8217;est de créer un script qui va nous permettre de créer la structure suivante :</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://xavki.blog/wp-content/uploads/2023/04/11-nos-namespaces-1024x576.png" alt="" class="wp-image-1620" srcset="https://xavki.blog/wp-content/uploads/2023/04/11-nos-namespaces-1024x576.png 1024w, https://xavki.blog/wp-content/uploads/2023/04/11-nos-namespaces-300x169.png 300w, https://xavki.blog/wp-content/uploads/2023/04/11-nos-namespaces-768x432.png 768w, https://xavki.blog/wp-content/uploads/2023/04/11-nos-namespaces-1536x864.png 1536w, https://xavki.blog/wp-content/uploads/2023/04/11-nos-namespaces-624x351.png 624w, https://xavki.blog/wp-content/uploads/2023/04/11-nos-namespaces.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Et on va faire original, on va créer un bridge nommé Xavki0 !! La gloire éternel merci Linux !!</p>



<h2 class="wp-block-heading">Première choses les variables de tout ce petit monde&#8230;</h2>



<p>Alors voici les variables que l&#8217;on définit dans la partie haute de notre script bash :</p>



<pre class="wp-block-preformatted">#!/usr/bin/bash

## Variables Namespace
NS1="x1"
NS2="x2"

## Variables vethernet
VETH1="xeth1"
VETH2="xeth2"

## Variables interface des conteneurs
VPEER1="xpeer1"
VPEER2="xpeer2"

# Variables ip des conteneurs
VPEER_ADDR1="10.11.0.10"
VPEER_ADDR2="10.11.0.20"

## Variables du bridge
BR_ADDR="10.11.0.1"
BR_DEV="xavki0"</pre>



<p>Première chose les 2 namespaces x1 et x2 qui sont les deux boites isolées d&#8217;un point de vue réseau. Et c&#8217;est important, aujourd&#8217;hui on ne voit que l&#8217;isolation réseau. Donc on va considérer que cela pourrait s&#8217;apparenter à 2 conteneurs si on ne regarde que la partie réseau.</p>



<p>Ensuite pour connecter ces deux namespaces à notre bridge, il faut un cable. Ce cable, il est virtuellement forcément, ce sont ce que l&#8217;on appelle des vethernets : xeth1 et xeth2.</p>



<p>Et pour chaque namespace comme dans nos conteneurs, il nous faut une interface virtuelle les vpeers : xpeer1 et xpeer2.</p>



<p>Pour chacune de ces interfaces, il nous faut une ip pour chaque : 10.11.0.10 et 10.11.0.20.</p>



<p>Bon et enfin, il nous faut un bridge xavki0 et l&#8217;adresse de ce bridge, en l&#8217;occurence l&#8217;ip1 de notre cidr (range d&#8217;ip). </p>



<h2 class="wp-block-heading">Maintenant créons tout ces éléments réseaux</h2>



<pre class="wp-block-preformatted">## Création des namespaces
ip netns add $NS1
ip netns add $NS2

##Création des vethernet (cables) &amp; interfaces
ip link add ${VETH1} type veth peer name ${VPEER1}
ip link add ${VETH2} type veth peer name ${VPEER2}

## Ajout des interfaces au namespace
ip link set ${VPEER1} netns ${NS1}
ip link set ${VPEER2} netns ${NS2}

## Activation des vethernet
ip link set ${VETH1} up
ip link set ${VETH2} up</pre>



<p>A noter particulièrement que pour la création des vethernets on précise le nim mais aussi les vpeers. nos fameuses interfaces vituelles de chaque namespace. Ensuite, on va ajouter ces vpeers à nos namespaces. Et enfin on va activer nos vethernet.</p>



<p>Vous remarquerez que l&#8217;on a pas tout créé 😉</p>



<h2 class="wp-block-heading">Ajout des ip dans les namespaces</h2>



<p>Alors pour l&#8217;instant c&#8217;est bien tout cela mais on a pas d&#8217;ip dans nos namespaces : ni loopback (127.0.0.1), ni nos fameuses ip définies dans nos variables au début. Bon ben go&#8230;</p>



<pre class="wp-block-preformatted">## Activation des interfaces dans les namespaces
ip netns exec ${NS1} ip link set lo up
ip netns exec ${NS2} ip link set lo up
ip netns exec ${NS1} ip link set ${VPEER1} up
ip netns exec ${NS2} ip link set ${VPEER2} up</pre>



<p>Et là vous voyez que notre commande ip avec son argument netns ne sert pas qu&#8217;à créer des namespaces&#8230; Non en fait elle permet de lancer les commandes de votre choix dans le contexte du namespace que vous allez préciser. On pourrait lancer un LS mais là on décide d&#8217;activer nos fameuses ip&#8230; Donc pour vérifier on pourrait passer un &#8220;ip a&#8221; plutôt que ip link set&#8230;</p>



<p>Maintenant ces ip on va les attribuer à nos interfaces de chacun de nos namespaces :</p>



<pre class="wp-block-preformatted">## Ajout des ip pour chaque interface
ip netns exec ${NS1} ip addr add ${VPEER_ADDR1}/16 dev ${VPEER1}
ip netns exec ${NS2} ip addr add ${VPEER_ADDR2}/16 dev ${VPEER2}</pre>



<p>Et je dirais que classiquement on fait cela avec &#8216;ip addr add&#8217; et le device en question. Remarquez aussi que l&#8217;on choisit ici de définir un masque /16.</p>



<h2 class="wp-block-heading">Et notre bridge associé à nos namespaces ???</h2>



<p>Ah quand même on vient pour avoir un bridge et on l&#8217;a toujours pas créé. Alors voilà ce que l&#8217;on fait : </p>



<pre class="wp-block-preformatted">## Création et activation du bridge
ip link add ${BR_DEV} type bridge
ip link set ${BR_DEV} up

## Ajout des vethernet au bridge
ip link set ${VETH1} master ${BR_DEV}
ip link set ${VETH2} master ${BR_DEV}

## Ajout de l'ip du bridge
ip addr add ${BR_ADDR}/16 dev ${BR_DEV}</pre>



<p>On créé le bridge et on le rend up (active).</p>



<p>On y branche nos deux câbles virtuels (souvenez vous ils sont déjà branchés de l&#8217;autre côté à l&#8217;interface de nos namespaces).</p>



<p>Et ensuite on définit le CIDR ou range d&#8217;ip c&#8217;est à dire notre /16 et du coup l&#8217;ip qui sera attribué à ce bridge au niveau de notre host.</p>



<h2 class="wp-block-heading">Router le traffic via le bridge</h2>



<p>Alors c&#8217;est bien d&#8217;avoir de IP, des vethernet et tout le bazard mais quand je suis dans un namespace je ne sait pas par où passer pour communiquer à l&#8217;extérieur&#8230; Et ien on va ajouter des routes dans nos namespaces et donc dans notre cas pour faire simple on va juste avoir des routes par défaut :</p>



<pre class="wp-block-preformatted">## Ajout des routes poru chaque namespace pour passer par le bridge
ip netns exec ${NS1} ip route add default via ${BR_ADDR}
ip netns exec ${NS2} ip route add default via ${BR_ADDR}</pre>



<p>Et pour accéder à internet !!! (à l&#8217;extérieur du host plutôt)</p>



<p>Oui c&#8217;est toujours cette fameuse question : comment je fais pour accéder à internet.</p>



<p>Et bien on va autoriser l&#8217;ip_forwarding au niveau de notre noyau linux. Et surtout on va utiliser iptables pour faire ce que l&#8217;on appelle un masquerade pour encapsuler nos paquets qui sortent et savoir dans quel namespace il doivent rentrer (par quelle interface plus précisément).</p>



<pre class="wp-block-preformatted">## Accès externe
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s ${BR_ADDR}/16 ! -o ${BR_DEV} -j MASQUERADE</pre>



<p>Et bim c&#8217;est terminé !!! Tout le script <a href="https://gitlab.com/xavki/docker-v2/-/blob/main/11-xavki-0/code.sh">est ici</a>.</p>



<p>Voilà j&#8217;espère que cela a été assez clair. Vous avez bien sûr la vidéo. Et n&#8217;hésitez pas à faire connaître : le blog, la chaine et le podcast !!!</p>
<p>L’article <a href="https://xavki.blog/bridge-namespaces-et-vethernet-comme-docker0/">Bridge, namespaces et vethernet comme docker0</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/bridge-namespaces-et-vethernet-comme-docker0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ce que vous devez savoir sur docker et ses réseaux</title>
		<link>https://xavki.blog/ce-que-vous-devez-savoir-sur-docker-et-ses-reseaux/</link>
					<comments>https://xavki.blog/ce-que-vous-devez-savoir-sur-docker-et-ses-reseaux/#respond</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Sun, 26 Mar 2023 14:41:32 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://xavki.blog/?p=1605</guid>

					<description><![CDATA[<p>Poursuivons sur notre formation à Docker. Et nous allons maintenant rentrer dans des éléments indispensables à bien assimiler pour pratiquer docker au quotidien et réaliser des tâches de conception ou de troubleshooting. Dès que l&#8217;on dit réseau, souvent, on commence... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/ce-que-vous-devez-savoir-sur-docker-et-ses-reseaux/">Ce que vous devez savoir sur docker et ses réseaux</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Poursuivons sur notre formation à Docker. Et nous allons maintenant rentrer dans des éléments indispensables à bien assimiler <strong><a href="https://xavki.blog/docker-tutoriaux-francais/">pour pratiquer docker au quotidien</a> et réaliser des tâches de conception ou de troubleshooting</strong>.</p>



<p>Dès que l&#8217;on dit réseau, souvent, on commence par avoir des frissons lol. Pourtant dans le cas de docker, je trouve que justement c&#8217;est tellement sympa à découvrir qu&#8217;en plus de se former à la conteneurisation vous vous formerez à un peu plus que ça (les éléments systèmes ntafis à Linux mais rarement utilisés comme les namespaces). Mais bon commençons par le commencement.</p>



<p>Comme je dis toujours, il faut savoir marcher avant de courrir mais si parfois en IT c&#8217;est pas forcément ce qui est le plus courrant.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Les réseaux docker : bridge, exposition vs publish" width="625" height="352" src="https://www.youtube.com/embed/lrBlaHxhpQk?list=PLn6POgpklwWq0iz59-px2z-qjDdZKEvWd" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Débutons par une histoire de ports</h2>



<p>Si on va souvent parler des bridges et notamment du Docker0, assez souvent on va vous parler de ports. Comment tu exposes le port  machin ? C&#8217;est quoi le port du conteneur ? Quel est le mapping des ports de l&#8217;applicatif xx ?&#8230; Et même souvent parfois avec des erreurs de termes employés. Par exemple, on utilise souvent le terme exposition de port &#8230; mais il s&#8217;agit de publication de port (ne vous inquiétez pas je le fais tout le temps ça).</p>



<p>Alors avant de parler de ports, on va retenir que docker dispose de différents mode en terme de réseau : </p>



<ul class="wp-block-list">
<li>bridge</li>



<li>host</li>



<li>overlay</li>



<li>none</li>



<li>macvlan&#8230;</li>
</ul>



<p>On va pour le moment se focaliser sur lebridge docker. Par défaut, il se nomme docker0.</p>



<p>La difficulté avec docker c&#8217;est que chaque conteneur dispose d&#8217;une IP à travers ce bridge et au sein du réseau de la machine sur laquelle le conteneur est déployé. Or ces ip ne sont pas fixes. Pour des raisons d&#8217;arrêts et de redémarrages souvent, ces IP de conteneurs vont changer. Donc la première règle est de ne pas s&#8217;y habituer et de la utiliser.</p>



<p>Du coup on se dit ok on ne va pas utiliser les ip mais comment on fait. Alors il existe différentes solutions : le mapping de ports entre le conteneur et le host, les DNS, l&#8217;API/socket docker.</p>



<p>Pour commencer on va parler du mapping de ports. Il s&#8217;agit simplement de se dire que l&#8217;on va faire correspondre un port du conteneur par exemple le 80 pour un conteneur nginx et un port de la machine host (par exemple 8080).</p>



<p>Ainsi, pour taper sur le conteneur nginx de l&#8217;extérieur de la machine :</p>



<ul class="wp-block-list">
<li>je curl l&#8217;ip de ma machine host 12.168.10.20:8080</li>



<li>et grâce à des règles iptables mise en place automatiquement par docker je finis par curl le 172.17.0.2:80 du conteneur</li>
</ul>



<p>Ce n&#8217;est pas toujours recommandé mais c&#8217;est très très souvent utilisé pour de multiples raisons dont la simplicité.</p>



<p>Ainsi le bridge permet de mettre en place le réseau suivant :</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro-1024x576.png" alt="" class="wp-image-1606" srcset="https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro-1024x576.png 1024w, https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro-300x169.png 300w, https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro-768x432.png 768w, https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro-1536x864.png 1536w, https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro-624x351.png 624w, https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Et pour notre mapping, voici comment on peut se le représenter :</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro1-1024x576.png" alt="" class="wp-image-1607" srcset="https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro1-1024x576.png 1024w, https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro1-300x169.png 300w, https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro1-768x432.png 768w, https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro1-1536x864.png 1536w, https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro1-624x351.png 624w, https://xavki.blog/wp-content/uploads/2023/03/Docker-8-network-intro1.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Alors c&#8217;est cool mais comment fait-on cela ??</p>



<p>Deux méthodes : le publish simple et le publish all&#8230;</p>



<p>Pour un publish simple, on peu appliquer notre modèle précédent avec la ligne de commande suivante :</p>



<p><code>docker run -d --name c1 -p 8080:80 nginx:latest</code></p>



<p>Et doc le 8080 de notre machine host redirige vers le 80 du conteneur c1.</p>



<p>Sinon et c&#8217;est nettement moins sympa on peut faire un publish all avec cette cli :</p>



<p><code>docker run -d --name c1 -P nginx:latest</code></p>



<p>Et là on voit moins ce que l&#8217;on fait. D&#8217;une part il faut que l&#8217;image nginx ait prévu d&#8217;exposer un port avec la clause EXPOSE (dans le Dockerfile on reverra cela plus tard). D&#8217;autre part, les ports exposés seront mappés avec des ports aléatoires de la machine host à partir de 32000. C&#8217;est pas aussi fun hein 😉 </p>



<p>On peut en retenir donc que l&#8217;on publie un port mais on ne l&#8217;expose pas. L&#8217;xposition ne revient qu&#8217;à une simple déclaration mais ça ne dit pas ce que l&#8217;on en fait.</p>



<h2 class="wp-block-heading">Créez votre propre bridge !!</h2>



<p>Voilà pour ce qui est des ports et maintenant on va découvrir un outil bien sympa à savoir docker network, une CLI dédiée à la gestion des réseaux docker et notamment des bridges. </p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Docker : la CLI network, réseau personnalisé, ip et driver host" width="625" height="352" src="https://www.youtube.com/embed/wQIyczrZNQM?list=PLn6POgpklwWq0iz59-px2z-qjDdZKEvWd" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>Ainsi vous allez pouvoir créer votre propre bridge avec une simple commande. Par exemple pour créer un bridge xavki0, on utilisera :</p>



<p><code>docker network create --driver=bridge --subnet=192.168.0.0/24 xavki0</code></p>



<p>et pour l&#8217;utiliser en lançant un conteneur c&#8217;est très simple :</p>



<p><code>docker run -d --name c1 --network xavki0 nginx:lates</code>t</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://xavki.blog/wp-content/uploads/2023/03/Docker-9-network-intro-1024x576.png" alt="" class="wp-image-1609" srcset="https://xavki.blog/wp-content/uploads/2023/03/Docker-9-network-intro-1024x576.png 1024w, https://xavki.blog/wp-content/uploads/2023/03/Docker-9-network-intro-300x169.png 300w, https://xavki.blog/wp-content/uploads/2023/03/Docker-9-network-intro-768x432.png 768w, https://xavki.blog/wp-content/uploads/2023/03/Docker-9-network-intro-1536x864.png 1536w, https://xavki.blog/wp-content/uploads/2023/03/Docker-9-network-intro-624x351.png 624w, https://xavki.blog/wp-content/uploads/2023/03/Docker-9-network-intro.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Et alors le truc cool une fois que vous affectez un réseau à un conteneur c&#8217;est que si vous ajoutez un autre conteneur à ce même réseau vous pourrez bénéficier d&#8217;une résolution dns entre les 2 conteneurs par leur nom. Cool ça non ??</p>



<h2 class="wp-block-heading">Et on peut aussi reconfigurer le bridge docker0 !!</h2>



<p>Les choses ne s&#8217;arrête pas là car on peut configurer assez largement les bridges : dns, gateway, cidr&#8230;</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Réseau : IP du Docker0, vethernet &amp; principe network namespace" width="625" height="352" src="https://www.youtube.com/embed/Yf0VilkBE2A?list=PLn6POgpklwWq0iz59-px2z-qjDdZKEvWd" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p>On peut aussi reconfigurer le bridge docker0 pour lui faire utiliser un autre range d&#8217;IP. Pour cela il suffit de créer un fichier dans /etc/docker/daemon.json contenant le paramètre bip :</p>



<p><code>{ </code><br><code>"bip": "10.10.0.1/16" </code><br><code>}</code></p>



<p>Et vous pouvez aussi faire en sorte que lors de la création d&#8217;un bridge, vous pourrez lui définir le nom que vous retrouverez dans un ifconfig ou un ip a. Pour cela il suffit de passer l&#8217;option </p>



<pre class="wp-block-code"><code>docker network create -o com.docker.network.bridge.name=xavki0 xavki0</code></pre>



<p>Allé dans un autre post et une autre vidéo on découvrira comment créer ses briges, namespaces et vethernet manuellement.</p>
<p>L’article <a href="https://xavki.blog/ce-que-vous-devez-savoir-sur-docker-et-ses-reseaux/">Ce que vous devez savoir sur docker et ses réseaux</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/ce-que-vous-devez-savoir-sur-docker-et-ses-reseaux/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Les moteurs de conteneurs hauts et bas niveaux</title>
		<link>https://xavki.blog/les-moteurs-de-conteneurs-hauts-et-bas-niveaux/</link>
					<comments>https://xavki.blog/les-moteurs-de-conteneurs-hauts-et-bas-niveaux/#respond</comments>
		
		<dc:creator><![CDATA[xavki]]></dc:creator>
		<pubDate>Fri, 10 Mar 2023 16:37:12 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<guid isPermaLink="false">https://xavki.blog/?p=1598</guid>

					<description><![CDATA[<p>Hey !! et on poursuit sur notre chemin qui mène à la connaissance de docker. Aujourd&#8217;hui on va regarder juste d&#8217;un oeil l&#8217;envers du décor de docker. L&#8217;idée c&#8217;est de comprendre les couches qui sont en dessous de votre ligne... <i class="fal fa-long-arrow-right"></i></p>
<p>L’article <a href="https://xavki.blog/les-moteurs-de-conteneurs-hauts-et-bas-niveaux/">Les moteurs de conteneurs hauts et bas niveaux</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Hey !! et on poursuit sur notre chemin qui mène à <a href="https://xavki.blog/docker-tutoriaux-francais/">la connaissance de docker</a>. Aujourd&#8217;hui on va regarder juste d&#8217;un oeil l&#8217;envers du décor de docker. L&#8217;idée c&#8217;est de comprendre les couches qui sont en dessous de votre ligne de commande (par exemple : docker run xxx).</p>



<p>Et pour cela il faut se dire que pour lancer un conteneur ou interagir avec lui on va utiliser différents outils, constituant différentes couches. Et pour les ordonner, on va <strong>les classer du haut niveau c&#8217;est à dire votre CLI vers le bas niveaux</strong> ce sont les fonctionnalités linux fondamentales.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Container Runtimes hauts &amp; bas niveaux" width="625" height="352" src="https://www.youtube.com/embed/vAlFsAaNx0I?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Docker CLI</h2>



<p>C&#8217;est votre ligne de commande avec laquelle vous intéragissez dans le terminal. Vous pouvez donc faire à peu près le maximum de ce qui est possible avec elle.</p>



<p>Pourtant ça ne reste qu&#8217;une CLI, une sorte de wrapper à laquelle on va demander des choses et qui exécutera des commandes plus complexes pour nous.</p>



<h2 class="wp-block-heading">Docker Engine (DockerD)</h2>



<p>Alors là on utilise un premier container runtime c&#8217;est à dire un outil qui permet de lancer des conteneurs. Mais là encore ce n&#8217;est pas lui qui les lance réellement. </p>



<p>Lui il va interagir avec des couches plus basses et ajouter à ces couches des fonctionnalités. On parle aussi de Container Manager.</p>



<p>DockerD c&#8217;est notamment lui qui permet les inspects, les builds, la gestion des images simplifiées que permet docker (car en dessous c&#8217;est un poil plus complexe).</p>



<h2 class="wp-block-heading">ContainerD</h2>



<p>On est toujours dans une couche considérée comme un container runtime de haut niveau. </p>



<p>Containerd permet de lancer des conteneurs via la couche en dessous et de gérer la partie communication à travers les réseaux, le bridge principal.</p>



<h2 class="wp-block-heading">RunC</h2>



<p>Ah le voilà le container runtime de bas niveau que l&#8217;on utilise lorsque l&#8217;on tape des commandes avec docker.</p>



<p>RunC est écrit en golang et permet de lancer des conteneurs. C&#8217;est à celà que l&#8217;on considère que c&#8217;est un conteneur de bas niveau. </p>



<p>Mais c&#8217;est pas lui qui a les fonctions les plus essentielles ;).</p>



<h2 class="wp-block-heading">Cgroups et Namespaces</h2>



<p>Eh oui finalement sans les Control Groups (CGroups) et les Namespaces, nada. Docker ne peut rien faire et RunC non plus.</p>



<p>Ces outils sont natifs du noay linux. </p>



<p>Les cgroups permettent la gestion et la répartition des ressources sur un host : cpu, mémoire, io, bande passante&#8230;</p>



<p>Les namespaces permettent de cloisonner les processus : IPC, PID, UTS&#8230;</p>



<p>Et&#8230; vous pouvez les utiliser sur des processus standards sur linux sans faire appelle aux conteneurs. Mais bon cela on le reverra plus tard.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://xavki.blog/wp-content/uploads/2023/03/Docker-7-High-Low-CR1-1024x576.png" alt="" class="wp-image-1599" srcset="https://xavki.blog/wp-content/uploads/2023/03/Docker-7-High-Low-CR1-1024x576.png 1024w, https://xavki.blog/wp-content/uploads/2023/03/Docker-7-High-Low-CR1-300x169.png 300w, https://xavki.blog/wp-content/uploads/2023/03/Docker-7-High-Low-CR1-768x432.png 768w, https://xavki.blog/wp-content/uploads/2023/03/Docker-7-High-Low-CR1-1536x864.png 1536w, https://xavki.blog/wp-content/uploads/2023/03/Docker-7-High-Low-CR1-624x351.png 624w, https://xavki.blog/wp-content/uploads/2023/03/Docker-7-High-Low-CR1.png 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Si cet article vous a plu n&#8217;hésitez pas à parler de la chaine Xavki autour de vous.</p>
<p>L’article <a href="https://xavki.blog/les-moteurs-de-conteneurs-hauts-et-bas-niveaux/">Les moteurs de conteneurs hauts et bas niveaux</a> est apparu en premier sur <a href="https://xavki.blog">Xavki</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://xavki.blog/les-moteurs-de-conteneurs-hauts-et-bas-niveaux/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
