100% found this document useful (1 vote)
10 views

[Ebooks PDF] download Kubernetes Programming with Go: Programming Kubernetes Clients and Operators Using Go and the Kubernetes API 1st Edition Philippe Martin full chapters

The document provides information about various eBooks available for download on ebookmass.com, including titles related to Kubernetes programming, Ansible for Kubernetes, and financial interdependence. It highlights the features of the eBooks, such as instant digital formats and links for access. Additionally, it mentions the authors and editions of the books, emphasizing the focus on programming with Go and Kubernetes API.

Uploaded by

telladawodcq
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
10 views

[Ebooks PDF] download Kubernetes Programming with Go: Programming Kubernetes Clients and Operators Using Go and the Kubernetes API 1st Edition Philippe Martin full chapters

The document provides information about various eBooks available for download on ebookmass.com, including titles related to Kubernetes programming, Ansible for Kubernetes, and financial interdependence. It highlights the features of the eBooks, such as instant digital formats and links for access. Additionally, it mentions the authors and editions of the books, emphasizing the focus on programming with Go and Kubernetes API.

Uploaded by

telladawodcq
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 51

Download the Full Ebook and Access More Features - ebookmass.

com

Kubernetes Programming with Go: Programming


Kubernetes Clients and Operators Using Go and the
Kubernetes API 1st Edition Philippe Martin

https://ebookmass.com/product/kubernetes-programming-with-
go-programming-kubernetes-clients-and-operators-using-go-
and-the-kubernetes-api-1st-edition-philippe-martin/

OR CLICK HERE

DOWLOAD NOW

Download more ebook instantly today at https://ebookmass.com


Instant digital products (PDF, ePub, MOBI) ready for you
Download now and discover formats that fit your needs...

Kubernetes Programming with Go: Programming Kubernetes


Clients and Operators Using Go and the Kubernetes API 1st
Edition Philippe Martin
https://ebookmass.com/product/kubernetes-programming-with-go-
programming-kubernetes-clients-and-operators-using-go-and-the-
kubernetes-api-1st-edition-philippe-martin-2/
ebookmass.com

Ansible for Kubernetes by Example: Automate Your


Kubernetes Cluster with Ansible 1st Edition Luca Berton

https://ebookmass.com/product/ansible-for-kubernetes-by-example-
automate-your-kubernetes-cluster-with-ansible-1st-edition-luca-
berton-2/
ebookmass.com

Ansible for Kubernetes by Example: Automate Your


Kubernetes Cluster with Ansible 1st Edition Luca Berton

https://ebookmass.com/product/ansible-for-kubernetes-by-example-
automate-your-kubernetes-cluster-with-ansible-1st-edition-luca-berton/

ebookmass.com

Financial Interdependence, Digitalization and


Technological Rivalries: Perspectives on Future
Cooperation and Integration in Sino-American Financial
Systems 1st ed. 2023 Edition René W.H. Van Der Linden
https://ebookmass.com/product/financial-interdependence-
digitalization-and-technological-rivalries-perspectives-on-future-
cooperation-and-integration-in-sino-american-financial-systems-1st-
ed-2023-edition-rene-w-h-van-der-lind/
ebookmass.com
The Practice of Creative Writings 3rd Edition, (Ebook PDF)

https://ebookmass.com/product/the-practice-of-creative-writings-3rd-
edition-ebook-pdf/

ebookmass.com

New Century Physics for Queensland Units 1&2 3rd Edition


Richard Walding

https://ebookmass.com/product/new-century-physics-for-queensland-
units-12-3rd-edition-richard-walding/

ebookmass.com

Saving Sorrow (Rescue Me Book 1) Kenzie Young

https://ebookmass.com/product/saving-sorrow-rescue-me-book-1-kenzie-
young/

ebookmass.com

Jews Across the Americas: A Sourcebook, 1492–Present


Adriana M. Brodsky

https://ebookmass.com/product/jews-across-the-americas-a-
sourcebook-1492-present-adriana-m-brodsky/

ebookmass.com

Her Dangerous Duke: A Steamy Second Chance Historical


Regency Romance Novel (The Duchess Deal Book 2) Tessa
Brookman
https://ebookmass.com/product/her-dangerous-duke-a-steamy-second-
chance-historical-regency-romance-novel-the-duchess-deal-book-2-tessa-
brookman/
ebookmass.com
Exercise for Frail Elders Second Edition

https://ebookmass.com/product/exercise-for-frail-elders-second-
edition/

ebookmass.com
Kubernetes
Programming
with Go
Programming Kubernetes Clients
and Operators Using Go and
the Kubernetes API

Philippe Martin
Kubernetes Programming
with Go
Programming Kubernetes Clients
and Operators Using
Go and the Kubernetes API

Philippe Martin
Kubernetes Programming with Go: Programming Kubernetes Clients and Operators
Using Go and the Kubernetes API

Philippe Martin
Blanquefort, France

ISBN-13 (pbk): 978-1-4842-9025-5 ISBN-13 (electronic): 978-1-4842-9026-2


https://doi.org/10.1007/978-1-4842-9026-2

Copyright © 2023 by Philippe Martin


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Divya Modi
Development Editor: James Markham
Coordinating Editor: Divya Modi
Copy Editor: Kim Burton Wiseman
Cover designed by eStudioCalamar
Cover image designed by Freepik (www.freepik.com)
Distributed to the book trade worldwide by Springer Science+Business Media New York, 1 New York Plaza,
New York, NY 10004. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail [email protected], or
visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is
Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware
corporation.
For information on translations, please e-mail [email protected]; for reprint,
paperback, or audio rights, please e-mail [email protected].
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to readers
on GitHub via the book's product page, located at https://github.com/Apress/Kubernetes-Programming-
with-Go-by-Philippe-Martin. For more detailed information, please visit http://www.apress.com/
source-code.
Printed on acid-free paper
To Mélina and Elsa, my constant source of truth
Table of Contents
About the Author��������������������������������������������������������������������������������������������������� xiii

About the Technical Reviewers�������������������������������������������������������������������������������xv


Acknowledgments�������������������������������������������������������������������������������������������������xvii

Introduction������������������������������������������������������������������������������������������������������������xix

Chapter 1: Kubernetes API Introduction������������������������������������������������������������������� 1


Kubernetes Platform at a Glance�������������������������������������������������������������������������������������������������� 1
OpenAPI Specification������������������������������������������������������������������������������������������������������������������� 3
Verbs and Kinds���������������������������������������������������������������������������������������������������������������������������� 5
Group-Version-Resource��������������������������������������������������������������������������������������������������������������� 6
Sub-resources������������������������������������������������������������������������������������������������������������������������������ 8
Official API Reference Documentation������������������������������������������������������������������������������������������ 9
The Deployment Documentation������������������������������������������������������������������������������������������� 10
Operations Documentation���������������������������������������������������������������������������������������������������� 12
The Pod Documentation�������������������������������������������������������������������������������������������������������� 14
One-Page Version of the Documentation������������������������������������������������������������������������������� 15
Conclusion���������������������������������������������������������������������������������������������������������������������������������� 16

Chapter 2: Kubernetes API Operations������������������������������������������������������������������� 17


Examining Requests������������������������������������������������������������������������������������������������������������������� 17
Making Requests������������������������������������������������������������������������������������������������������������������������ 18
Using kubectl as a Proxy������������������������������������������������������������������������������������������������������� 18
Creating a Resource�������������������������������������������������������������������������������������������������������������� 19
Getting Information About a Resource����������������������������������������������������������������������������������� 20
Getting the List of Resources������������������������������������������������������������������������������������������������ 20

v
Table of Contents

Filtering the Result of a List�������������������������������������������������������������������������������������������������� 21


Deleting a Resource�������������������������������������������������������������������������������������������������������������� 26
Deleting a Collection of Resources���������������������������������������������������������������������������������������� 26
Updating a Resource������������������������������������������������������������������������������������������������������������� 27
Managing Conflicts When Updating a Resource�������������������������������������������������������������������� 28
Using a Strategic Merge Patch to Update a Resource����������������������������������������������������������� 32
Applying Resources Server-side�������������������������������������������������������������������������������������������� 38
Watching Resources�������������������������������������������������������������������������������������������������������������� 44
Filtering During a Watch Session������������������������������������������������������������������������������������������� 45
Watching After Listing Resources������������������������������������������������������������������������������������������ 45
Restarting a watch Request�������������������������������������������������������������������������������������������������� 46
Allowing Bookmarks to Efficiently Restart a watch Request������������������������������������������������� 47
Paginating Results����������������������������������������������������������������������������������������������������������������� 50
Getting Results in Various Formats��������������������������������������������������������������������������������������������� 52
Getting Results as a Table����������������������������������������������������������������������������������������������������� 52
Using the YAML Format��������������������������������������������������������������������������������������������������������� 54
Using the Protobuf Format���������������������������������������������������������������������������������������������������� 54
Conclusion���������������������������������������������������������������������������������������������������������������������������������� 55

Chapter 3: Working with API Resources in Go�������������������������������������������������������� 57


API Library Sources and Import�������������������������������������������������������������������������������������������������� 57
Content of a Package������������������������������������������������������������������������������������������������������������������ 58
types.go��������������������������������������������������������������������������������������������������������������������������������� 58
register.go������������������������������������������������������������������������������������������������������������������������������ 59
doc.go������������������������������������������������������������������������������������������������������������������������������������ 60
generated.pb.go and generated.proto����������������������������������������������������������������������������������� 60
types_swagger_doc_generated.go��������������������������������������������������������������������������������������� 60
zz_generated.deepcopy.go���������������������������������������������������������������������������������������������������� 61
Specific Content in core/v1��������������������������������������������������������������������������������������������������������� 61
ObjectReference�������������������������������������������������������������������������������������������������������������������� 61
ResourceList�������������������������������������������������������������������������������������������������������������������������� 62
Taint��������������������������������������������������������������������������������������������������������������������������������������� 64

vi
Table of Contents

Toleration������������������������������������������������������������������������������������������������������������������������������� 65
Well-Known Labels���������������������������������������������������������������������������������������������������������������� 66
Writing Kubernetes Resources in Go������������������������������������������������������������������������������������������ 67
Importing the Package���������������������������������������������������������������������������������������������������������� 67
The TypeMeta Fields�������������������������������������������������������������������������������������������������������������� 68
The ObjectMeta Fields����������������������������������������������������������������������������������������������������������� 69
Spec and Status�������������������������������������������������������������������������������������������������������������������� 76
Comparison with Writing YAML Manifests����������������������������������������������������������������������������� 76
A Complete Example������������������������������������������������������������������������������������������������������������������� 78
Conclusion���������������������������������������������������������������������������������������������������������������������������������� 83

Chapter 4: Using Common Types���������������������������������������������������������������������������� 85


Pointers��������������������������������������������������������������������������������������������������������������������������������������� 85
Getting the Reference of a Value������������������������������������������������������������������������������������������� 85
Dereferencing a Pointer��������������������������������������������������������������������������������������������������������� 86
Comparing Two Referenced Values��������������������������������������������������������������������������������������� 86
Quantities������������������������������������������������������������������������������������������������������������������������������������ 87
Parsing a String as Quantity�������������������������������������������������������������������������������������������������� 87
Using an inf.Dec as a Quantity����������������������������������������������������������������������������������������������� 88
Using a Scaled Integer as a Quantity������������������������������������������������������������������������������������� 89
Operations on Quantities������������������������������������������������������������������������������������������������������� 90
IntOrString����������������������������������������������������������������������������������������������������������������������������������� 90
Time�������������������������������������������������������������������������������������������������������������������������������������������� 92
Factory Methods�������������������������������������������������������������������������������������������������������������������� 92
Operations on Time���������������������������������������������������������������������������������������������������������������� 92
Conclusion���������������������������������������������������������������������������������������������������������������������������������� 93

Chapter 5: The API Machinery�������������������������������������������������������������������������������� 95


The Schema Package����������������������������������������������������������������������������������������������������������������� 96
Scheme��������������������������������������������������������������������������������������������������������������������������������������� 97
Initialization��������������������������������������������������������������������������������������������������������������������������� 98
Mapping������������������������������������������������������������������������������������������������������������������������������� 100

vii
Table of Contents

Conversion��������������������������������������������������������������������������������������������������������������������������� 101
Serialization������������������������������������������������������������������������������������������������������������������������� 103
RESTMapper����������������������������������������������������������������������������������������������������������������������������� 105
Kind to Resource����������������������������������������������������������������������������������������������������������������� 106
Resource to Kind����������������������������������������������������������������������������������������������������������������� 107
Finding Resources��������������������������������������������������������������������������������������������������������������� 107
The DefaultRESTMapper Implementation���������������������������������������������������������������������������� 107
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 108

Chapter 6: The Client-go Library��������������������������������������������������������������������������� 109


Connecting to the Cluster��������������������������������������������������������������������������������������������������������� 110
In-cluster Configuration������������������������������������������������������������������������������������������������������� 110
Out-of-Cluster Configuration����������������������������������������������������������������������������������������������� 110
Getting a Clientset��������������������������������������������������������������������������������������������������������������������� 115
Using the Clientset�������������������������������������������������������������������������������������������������������������������� 116
Examining the Requests����������������������������������������������������������������������������������������������������������� 119
Creating a Resource������������������������������������������������������������������������������������������������������������������ 120
Getting Information About a Resource�������������������������������������������������������������������������������������� 122
Getting List of Resources���������������������������������������������������������������������������������������������������������� 123
Filtering the Result of a List������������������������������������������������������������������������������������������������������ 125
Setting LabelSelector Using the Labels Package���������������������������������������������������������������� 125
Setting Fieldselector Using the Fields Package������������������������������������������������������������������ 128
Deleting a Resource������������������������������������������������������������������������������������������������������������������ 130
Deleting a Collection of Resources������������������������������������������������������������������������������������������� 133
Updating a Resource����������������������������������������������������������������������������������������������������������������� 134
Using a Strategic Merge Patch to Update a Resource�������������������������������������������������������������� 135
Applying Resources Server-side with Patch����������������������������������������������������������������������������� 138
Server-side Apply Using Apply Configurations�������������������������������������������������������������������������� 140
Building an ApplyConfiguration from Scratch���������������������������������������������������������������������� 142
Building an ApplyConfiguration from an Existing Resource������������������������������������������������ 143

viii
Table of Contents

Watching Resources����������������������������������������������������������������������������������������������������������������� 145


Errors and Statuses������������������������������������������������������������������������������������������������������������������ 149
Definition of the metav1.Status Structure��������������������������������������������������������������������������� 149
Error Returned by Clientset Operations������������������������������������������������������������������������������� 153
RESTClient�������������������������������������������������������������������������������������������������������������������������������� 154
Building the Request����������������������������������������������������������������������������������������������������������� 154
Executing the Request��������������������������������������������������������������������������������������������������������� 161
Exploiting the Result������������������������������������������������������������������������������������������������������������ 161
Getting Result as a Table����������������������������������������������������������������������������������������������������������� 162
Discovery Client������������������������������������������������������������������������������������������������������������������������ 164
RESTMapper����������������������������������������������������������������������������������������������������������������������������� 165
PriorityRESTMapper������������������������������������������������������������������������������������������������������������ 165
DeferredDiscoveryRESTMapper������������������������������������������������������������������������������������������ 167
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 167

Chapter 7: Testing Applications Using Client-go�������������������������������������������������� 169


Fake Clientset��������������������������������������������������������������������������������������������������������������������������� 170
Checking the Result of the Function������������������������������������������������������������������������������������ 171
Reacting to Actions�������������������������������������������������������������������������������������������������������������� 173
Checking the Actions����������������������������������������������������������������������������������������������������������� 177
Fake REST Client����������������������������������������������������������������������������������������������������������������������� 185
FakeDiscovery Client���������������������������������������������������������������������������������������������������������������� 188
Stubbing the ServerVersion������������������������������������������������������������������������������������������������� 189
Actions��������������������������������������������������������������������������������������������������������������������������������� 190
Mocking Resources������������������������������������������������������������������������������������������������������������� 190
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 191

Chapter 8: Extending Kubernetes API with Custom Resources Definitions���������� 193


Performing Operations in Go����������������������������������������������������������������������������������������������������� 194
The CustomResourceDefinition in Detail����������������������������������������������������������������������������������� 195
Naming the Resource���������������������������������������������������������������������������������������������������������� 196
Definition of the Resource Versions������������������������������������������������������������������������������������� 197
Converting Between Versions���������������������������������������������������������������������������������������������� 198
ix
Table of Contents

Schema of the Resource����������������������������������������������������������������������������������������������������������� 199


Deploying a Custom Resource Definition���������������������������������������������������������������������������������� 201
Additional Printer Columns������������������������������������������������������������������������������������������������������� 204
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 207

Chapter 9: Working with Custom Resources�������������������������������������������������������� 209


Generating a Clientset��������������������������������������������������������������������������������������������������������������� 209
Using deepcopy-gen������������������������������������������������������������������������������������������������������������ 211
Using client-gen������������������������������������������������������������������������������������������������������������������ 213
Using the Generated Clientset��������������������������������������������������������������������������������������������� 216
Using the Generated fake Clientset������������������������������������������������������������������������������������� 217
Using the Unstructured Package and Dynamic Client��������������������������������������������������������������� 217
The Unstructured Type��������������������������������������������������������������������������������������������������������� 217
The UnstructuredList Type��������������������������������������������������������������������������������������������������� 221
Converting Between Typed and Unstructured Objects�������������������������������������������������������� 223
The Dynamic Client�������������������������������������������������������������������������������������������������������������� 223
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 229

Chapter 10: Writing Operators withthe Controller-­Runtime Library��������������������� 231


The Manager����������������������������������������������������������������������������������������������������������������������������� 232
The Controller��������������������������������������������������������������������������������������������������������������������������� 235
Creating a Controller����������������������������������������������������������������������������������������������������������� 236
Watching Resources������������������������������������������������������������������������������������������������������������ 237
A First Example������������������������������������������������������������������������������������������������������������������� 241
Using the Controller Builder������������������������������������������������������������������������������������������������ 244
A Second Example Using the ControllerBuilder������������������������������������������������������������������� 245
Injecting Manager Resources into the Reconciler��������������������������������������������������������������� 247
Using the Client������������������������������������������������������������������������������������������������������������������������� 250
Getting Information About a Resource��������������������������������������������������������������������������������� 250
Listing Resources���������������������������������������������������������������������������������������������������������������� 251
Creating a Resource������������������������������������������������������������������������������������������������������������ 254
Deleting a Resource������������������������������������������������������������������������������������������������������������ 254

x
Table of Contents

Deleting a Collection of Resources�������������������������������������������������������������������������������������� 255


Updating a Resource����������������������������������������������������������������������������������������������������������� 256
Patching a Resource������������������������������������������������������������������������������������������������������������ 256
Updating the Status of a Resource�������������������������������������������������������������������������������������� 259
Patching the Status of a Resource�������������������������������������������������������������������������������������� 260
Logging������������������������������������������������������������������������������������������������������������������������������������� 261
Verbosity������������������������������������������������������������������������������������������������������������������������������ 262
Predefined Values���������������������������������������������������������������������������������������������������������������� 262
Logger Name����������������������������������������������������������������������������������������������������������������������� 262
Getting the Logger from Context����������������������������������������������������������������������������������������� 263
Events��������������������������������������������������������������������������������������������������������������������������������������� 263
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 265

Chapter 11: Writing the Reconcile Loop��������������������������������������������������������������� 267


Writing the Reconcile Function������������������������������������������������������������������������������������������������� 268
Checking Whether the Resource Exists������������������������������������������������������������������������������� 268
Implementing the Reconciled Resource������������������������������������������������������������������������������ 268
Simple Implementation Example����������������������������������������������������������������������������������������� 270
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 275

Chapter 12: Testing the Reconcile Loop��������������������������������������������������������������� 277


The envtest Package����������������������������������������������������������������������������������������������������������������� 277
Installing envtest Binaries��������������������������������������������������������������������������������������������������� 277
Using envtest����������������������������������������������������������������������������������������������������������������������� 278
Defining a ginkgo Suite������������������������������������������������������������������������������������������������������������� 279
Writing the Tests����������������������������������������������������������������������������������������������������������������������� 283
Test 1����������������������������������������������������������������������������������������������������������������������������������� 284
Test 2����������������������������������������������������������������������������������������������������������������������������������� 285
Test 3����������������������������������������������������������������������������������������������������������������������������������� 285
Test 4����������������������������������������������������������������������������������������������������������������������������������� 285
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 290

xi
Table of Contents

Chapter 13: Creating an Operator with Kubebuilder�������������������������������������������� 291


Installing Kubebuilder��������������������������������������������������������������������������������������������������������������� 291
Creating a Project��������������������������������������������������������������������������������������������������������������������� 291
Adding a Custom Resource to the Project�������������������������������������������������������������������������������� 293
Building and Deploying Manifests�������������������������������������������������������������������������������������������� 295
Running the Manager Locally��������������������������������������������������������������������������������������������������� 295
Personalizing the Custom Resource����������������������������������������������������������������������������������������� 296
Editing the Go Structures���������������������������������������������������������������������������������������������������� 297
Enabling the Status Subresource���������������������������������������������������������������������������������������� 297
Defining Printer Columns����������������������������������������������������������������������������������������������������� 297
Regenerating the Files�������������������������������������������������������������������������������������������������������� 298
Implementing the Reconcile Function�������������������������������������������������������������������������������������� 299
Adding RBAC Annotations��������������������������������������������������������������������������������������������������������� 299
Deploying the Operator on the Cluster�������������������������������������������������������������������������������������� 300
Creating a New Version of the Resource����������������������������������������������������������������������������������� 301
Defining a New Version������������������������������������������������������������������������������������������������������� 302
Implementing Hub and Convertible������������������������������������������������������������������������������������� 303
Setting Up the webhook������������������������������������������������������������������������������������������������������ 305
Updating kustomization Files���������������������������������������������������������������������������������������������� 306
Using Various Versions�������������������������������������������������������������������������������������������������������� 306
Conclusion�������������������������������������������������������������������������������������������������������������������������������� 308

Index��������������������������������������������������������������������������������������������������������������������� 309

xii
About the Author
Philippe Martin has been working with Kubernetes for
five years, first by creating an Operator to deploy video
CDNs into the cloud, later helping companies deploy their
applications into Kubernetes, then writing a Client to help
developers work in a Kubernetes environment. Philippe
has passed the CKAD, CKA, and CKS certifications. He has
extensive experience with distributed systems and open-
source software: he started his career 20 years ago creating
thin clients based on the Linux kernel and open-­source
components. He is currently working at Red Hat on the
Development Tools team.
Philippe has been active in the development of Kubernetes, especially its
documentation, and participates in the translation of the official documentation into
French, has edited two reference books about the Kubernetes API and kubectl, and is
responsible for the French translation of the Kubernetes Dashboard. He participated in
Google Season of Docs to create the new Kubernetes API Reference section of the official
documentation and is maintaining it.

xiii
About the Technical Reviewers
Bartosz Majsak writes code for fun and profit while proudly
wearing a red fedora (also known as the Red Hat). He has
been long-time open-source contributor and Java developer
turned into Golang aficionado. Bartosz is overly enthusiastic
about coffee, open source, and speaking at conferences,
not necessarily in that order. One thing that perhaps proves
he is not a total geek is his addiction to alpine skiing (and
running).

Prasanth is a Blockchain Certified Professional, Professional


Scrum Master, and Microsoft Certified Trainer who is
passionate about helping others learn how to use and gain
benefits from the latest technologies. He is a thought leader
and practitioner in Blockchain, Cloud, and Scrum. He also
handles the Agile Methodology, Cloud, and Blockchain
technology community initiatives within TransUnion
through coaching, mentoring, and grooming techniques.
Prasanth is an adjunct professor and a technical speaker.
He was selected as a speaker at the China International
Industry Big Data Expo 2018 by the Chinese government and also was invited to the
International Blockchain Council by the Government of Telangana and Goa. In addition,
he received accolades from the Chinese government for his presentation at China
International Industry Big Data Expo 2018. Prasanth has published his Patent, entitled
“Digital Educational Certificate Management System Using IPFS-Based Blockchain.”
To date, he has interacted extensively, reaching more than 50,000 students,
mostly within the technical domain. Prasanth is a working group member of the
CryptoCurrency Certification Consortium, the Scrum Alliance, the Scrum Organization,
and the International Institute of Business Analysis.

xv
Acknowledgments
I would like to thank the whole Anevia “CDN” team who started working with me on
Kubernetes back in 2018: David, Ansou, Hossam, Yassine, Étienne, Jason, and Michaël.
Special thanks to Damien Lucas for initiating this project and for having trusted us with
this challenge.
My discovery of Kubernetes has been much easier and pleasant thanks to the TGIK
channel and its numerous episodes, hosted by Joe Beda, Kris Nova, and many others.
Plus, thanks to all the Kubernetes community for such a great ecosystem!

xvii
Another Random Document on
Scribd Without Any Related Topics
The Project Gutenberg eBook of Salvage
This ebook is for the use of anyone anywhere in the United States
and most other parts of the world at no cost and with almost no
restrictions whatsoever. You may copy it, give it away or re-use it
under the terms of the Project Gutenberg License included with this
ebook or online at www.gutenberg.org. If you are not located in the
United States, you will have to check the laws of the country where
you are located before using this eBook.

Title: Salvage

Author: Roy Norton

Release date: March 24, 2024 [eBook #73244]

Language: English

Original publication: New York: Street & Smith Corporation, 1928

Credits: Roger Frank and Sue Clark

*** START OF THE PROJECT GUTENBERG EBOOK SALVAGE ***


Salvage
By Roy Norton
Author of “Mr. Catlin’s Weakness,” “Widders Come First,” Etc.

Captain Drake again proves, and this time most brilliantly,


his right to the title: “The Opportunist.” With remarkable
sagacity he scents an opportunity on the wind.

Piræus, that historical port of Greece, lay drenched and sweltering in


sunshine. Its great water front, whence galleys had sailed bravely
forth in ancient days, was packed with shipping, most of it idle; for
trade was in the doldrums. Docked between two big “smoke boats”
lay the very trim and neat steam schooner, Malabart, Captain Eli
Drake, owner and commander; and there was nothing in the
Malabart’s physical appearance to indicate that she, too, was
yawning for a cargo of any sort, or to any port, though the charter
rate might be so low as to barely pay expenses. Captain Drake,
whose sobriquet of “The Old Hyena” had survived the days of sail,
was ashore, harassed by cares.
He had been eating into capital to keep his ship in commission,
and his crew, which he had gathered in the course of many years,
from being disbanded. He prized his crew and, after his ship, they
came first in his affections. In quest of cargo—any cargo—he had
scoured the port, made daily trips over the short drive to Athens,
and spent liberal sums on cablegrams to many agents, without avail.
He felt like cursing the big steamship companies, which, with their
army of organized runners, were rapidly driving the independent
owners and tramps off the seas.
In a mood of sullen obstinacy he had tramped almost the length
of the docks when, unexpectedly, he heard the clatter of a cargo
winch; and the sound was so unusual that, like a magnet, it drew
him in its direction. He found a rusty tramp that was lading.
“Now what—how did I miss getting that cargo?” he reflected.
“The Rhodialim, eh?” And after a moment’s thought he muttered:
“Oh, yes. Belongs to that firm of Hakim & Letin. Got her and one
other schooner, doing mostly Levantine and East African coast trade.
Wish I could have got that cargo. My luck’s out.”
Without thinking, or observing that at the dock gates there was a
watchman, who, at the moment, had his back turned and was in
voluble altercation with one of his countrymen, Captain Eli strolled
inward. He finally halted, and with hands in pockets stared, suddenly
discovering something else that made him curious.
“That’s blamed funny!” he thought. “Big cases marked ‘Mining
machinery,’ but a couple of stevedores chuck ’em into the slings as if
they were empty. Also cases of merchandise put up like heavy prints
that seem just as light, and as—— Good Lord! Up there on the
bridge! If that ain’t Bill Morris, I’m dotty. So he’s got a ship out here,
eh, after it got too hot for him about everywhere else on salt water!
Lost two ships in the Pacific trade, under mighty suspicious
circumstances, and had his ticket taken away, last I heard of him.
Ummh! Ten or twelve years ago, that was. So he’s skipperin’ this
craft, eh? If him and me hadn’t locked spars two or three times, I’d
go over and rile him up with a leetle light, airy banter. I guess he’s
——”
“Hey you! Got any business here? How’d you get past me at the
gate?” a voice disturbed him. And although the fellow spoke bastard
Greek, Drake, who, with a sailor’s facility, had picked up considerable
of the tongue, understood, and turned to see the watchman
glowering at him.
“Why?” he asked. “Can’t anybody come onto your dock? Nothing
secret about it, is there?”
The watchman sputtered something about none without a pass
from Hakim & Letin being allowed in, and somewhat peremptorily
ordered Drake to clear out. Not being accustomed to such
treatment, disgruntled, affronted, but recognizing the weakness of
his position and the futility of retort, Drake turned and, swearing
under his breath, obeyed.
It is possible that the episode might have passed from his mind
entirely, but for an encounter that followed some hours later, when,
just as he was turning toward the Malabart, a man whose face bore
the almost indelible stamp of the engine rooms of ships, with grease
worked deeply into the pores of the skin, respectfully touched his
cap peak and accosted him in fairly good, though accented, English.
“Captain Drake,” he said. “Excuse me, sir, for stopping you, but I
am a good man out of work, and want a job on your ship, sir.”
“Sorry, my man, but we’re full up,” Captain Eli replied. “Too full,”
he added, and would have proceeded on his way, had not the
applicant insisted.
“I am good man, sir. First-class engineer; but I would take
anything in your engine room. Because me, I have big family, and
ships are all full now, it seems to me, sir. I lose job when not my
fault. Not at all. When I took engines of ship Rhodialim anybody tell
you they scrap heap. I make ’em good. And now, without word,
since that Captain Bill Morris come, I am fired. He say have his own
engineer and——”
“Huh? What’s that?” Captain Eli, who had been slowly moving
forward with the insistent one at his side, stopped and stared at the
man. “Do you happen to know the name of the new engineer?”
“It is Simmons, or Simons, or something like that.”
Drake’s mouth pursed itself as if to whistle an exclamation, and
for a moment he stood absent-mindedly staring at the stones
beneath his feet. But his thought ran: “Simmons! Simmons! That
was the engineer of the ship that Bill lost last, and he was one of the
chief witnesses at the insurance investigation. Something funny
about this business!”
He abruptly started away, saying as he did so: “You come on
board with me, and I’ll learn if there’s anything can be done. Let me
see your ticket.” And then, a moment later: “Beltramo—Giuseppe
Beltramo is your name, eh? And your ticket shows a long, clean
record. No wonder they didn’t want you on that boat. Never mind
the questions, now. I’ll ask all the questions myself.”
As a rule the relations between Captain Eli Drake and his chief
mate, William Catlin, were of two separate characters, inasmuch as
afloat they observed the distinctions in station and Drake brooked no
interference; but it was well known that ashore they were more
intimate than brothers usually are, and confidants in nearly
everything. Hence, when the commander sent for Catlin upon his
arrival aboard, and on his entry into the cabin addressed him as
“Bill,” Catlin thought: “Something’s turned up.” Aloud he said:
“Landed something, skipper?”
“Landed enough to set me to a heap of thinking, Bill,” Drake said.
And then he bent forward and in a confidential tone told of his
experiences, ending with: “It seems to me there’s some sort of a job
being put up by Hakim & Letin; and—well, there might be some way
for us to make something out of it.”
“Sort of an opportunity, eh?” Catlin grinned, remembering that the
Cape Cod man had earned the reputation of being an opportunist.
“Maybe you can see one, but I can’t. Don’t mind my thick-
headedness. I can get anything when it’s explained, all right.”
But Drake seemed to have become absorbed in some thought of
his own. He stared absently through the cloud of pipe smoke; and
finally chuckled, as if he had reached a solution of some problem.
“I think I sort of grab an idea,” he said at last, getting to his feet.
“You’re a hell of a good friend, Bill, but as a helper in working out a
puzzle you don’t amount to much. Never mind. Think I got it, myself.
So just talking it over with you did have some use, after all. You go
down and keep that feller I brought aboard interested, while I slip
below and see the chief. Most likely be in his cabin, I expect.”
They went out together and Drake sought the engineer.
“Forbes,” he said to that gray-haired veteran. “Can you find
something for an engineer out of a job to do for a few days?”
“Can’t find enough to do myself, let alone make work for a new
man. If this keeps up—— Hold on. While I think of it, that chap Flint,
my third, asked me to-day if I thought there was a chance for him in
the navy. Now if he got a month off to go to the nearest place he
could pass his examinations and file his application——”
“The sure-enough right thing! Let him take a month, and put this
feller on until Flint comes back. Come on up topside and talk to him.”
The result of the conversation was that two men, at least, were
made happy that evening—Flint, who had got unexpected leave for
a month, and Beltramo, who had got a temporary billet.
But Drake was not on the ship when the shift was made. In the
roughest suit of clothes he could muster he had gone ashore and
made his way to a not too-clean bar, where he knew that pilots were
wont to gather. There he patiently waited for the arrival of one he
knew. The man came at last, and Captain Eli drew him into a little
private room at the rear.
“Christophe,” Captain Eli said, “I have done you a favor once or
twice, and you’re the kind of man that likes to repay. Well, the time
has come when you may be of use. Now first, you’ve got to keep
your mouth shut—not one word—not one word to anybody, not even
your wife, of what we say here in this room.”
The pilot, whose face was seamed with years and sea service,
promptly lifted his hand and swore an oath that would have satisfied
any band of conspirators that ever existed.
“First, you know this sea as well as any one, I take it?”
“By Heaven! Better than all save one or two. Was I not a
fisherman in these waters when old enough to float? I know every
foot of it and every reef, and every island and——”
“Good!” Captain Eli interrupted. He leaned across the little table
between them and lowered his voice. “Christophe, if you were going
to sink a ship that was supposed to be bound eastward—say for
Jaffa—where would you do it?”
For a moment the pilot’s mouth hung open and his eyes were
wide, as if he feared for Drake’s sanity.
“But, sir, captain—you—you are not going to sink—— You don’t
mean that——”
“No, of course not! I sink nothing. But you think it over carefully
and answer my questions,” Drake continued. And the pilot, still
wondering, slowly lowered his eyes, shut them as if to ponder such
a case, and then asked: “What time of year, captain?”
“This time of year,” Drake replied.
And again the weather-beaten old pilot shut his eyes and thought.
“Listen, sir,” he said in his quaint but adequate English. “Many
things one must think of. If mens want to sink ship, but not drown
anybody, they must be not too far from land for open boat, eh? Must
be some place where not too much danger big seas for small boats,
eh? Must also be some place where nobody see—away from
fishermen’s boats, or cargo boats, or bigger ships—some place
lonely this time year. Plenty places man could scuttle ship, but few
where get all these things what want, eh? Well, about now most
fishin’ boats work”—he got up and walked to a rough map that was
tacked on the wall and that was almost solidly smeared with the
trails of many fingers across its surface—“works up about here
mostly. In some months, here; some months, there; but now, about
here. So no good up there.” His finger moved as he talked. “No good
through here, because big ships go there. No good there, because
small ships what do island trade work in and out. So, here best place
for all things. Almost only place which fit all I speak between here
and Island of Rhodes. Not too far out of the way. Very good place.
Deep water—plenty water and not much chance boat ever drift
when hit bottom. Yes, captain, sir, that best place anybody can think
of—right about there.”
His gnarled finger ceased to move—pointed at open water off
Nauplia.
They sat down again and, while Christophe eyed him with
perplexed looks, the captain reflected.
“That, you think, is a place a man who knew these waters well
would select?” he said. “But a man who didn’t know them?”
“God knows where!” the pilot exclaimed, lifting his hands and
letting them fall to the table again. “It is the place—the place I say—
where one who knew would choose in, say—seven times out of ten.
As you, sir, know, there are some thousands of islands.”
For half an hour Drake continued to catechize, but without stirring
the old pilot from his conclusions.
“Well, Christophe,” he said at last, arising to go, “I’m going to hire
you for a cruise that may never take place; but I’m taking a little
gamble on certain things. You begin work to-morrow, always with
your mouth shut. Here’s what you are to find out: First, when the
Rhodialim sails. Second, if she’s taking a pilot aboard, and if so, who
and what he is. And third, you’re to report to me aboard the
Malabart each evening just after dark. I don’t care to have too many
notice that you come there. Is it understood? Going wages, of
course,” he concluded, with Yankee thrift.
“Yes, sir, captain. Very well I understood it, and do what you ask.
Maybe some time you tell me why all this, eh?”
“Maybe,” said Drake laconically, as he thumped upon the table to
pay for his bill. And he left behind him one who was still wondering a
little if a certain Captain Drake was all there.
Catlin had a surprise on the following morning, when told that
they were going to take on some supplies. And he was still more
astonished when Drake asked him to muster the crew and learn
whether there was any man aboard who had ever had any
experience in diving. Catlin found a stoker who admitted that years
before he had worked for a salvage company. Drake told the man to
get on shore-going clothes and come with him, and the twain
disappeared. The man returned that afternoon accompanied by a
truck, which duly unloaded and brought aboard a collection of stuff
that made even Catlin scratch his head, and caused conjectures
for’ard as to whether The Old Hyena was going into the wrecking
business. It consisted of a complete diving outfit—air pumps and all
—as well as huge collision mats and handling gear. Drake did not
appear until evening, and seemed unusually speechless, and he
dined and waited for Christophe.
The latter came at last, grinning with self-satisfaction, and was at
once closeted with Drake, who asked: “Well, what did you learn?”
“That Rhodialim, she sail day after to-morrow. She got most her
cargo aboard now. But it’s funny, captain, sir, she got one man who
knew this sea same as me. Long time ago he fisherman, then go
away, and been down Smyrna where not got too good name. Good
man, when sober, but too much drink, so never get good job. That
man I see in saloon. He most full and—— You owe me thirty
drachmas, I spend on him get him fuller, so he talk. Bymeby he
borrow fifty drachmas from me, which also you owes me. He brag
some and say pretty soon he pay back. Pretty soon, maybe two
weeks, he come back with plenty money in pockets. But he shut up
like oyster when I ask how make this so much money, and he say
nobody but him ever goin’ know that. Now what you wish me
make?”
“You go home and keep on keeping your mouth shut. Come
aboard at noon to-morrow. We sail to-morrow afternoon.” Drake was
suddenly decided in his movements.
“How long be gone from my old woman?” Christophe asked.
“Can’t tell. Maybe one week, maybe two. Not likely to be longer, I
think. But all you’ve got to do is to come aboard and I’ll tell you then
where we’re bound. I’m going to clear for Smyrna. There will be no
secret about that.”
On the following morning when Captain Eli went ashore he took
with him the chief engineer. The latter returned with two big
machine cases and armored, high-pressure hose, together with a
case of fittings. Late that afternoon the Malabart slipped out and
away, so palpably light that other sea captains who observed her
shook their heads with understanding. A ship putting to sea in
ballast in dull times evokes the sympathy of the seawise. Aboard the
Malabart there was an air of gloom among the crew.
The captain and owner, walking the bridge, said to Catlin:
“Well, Bill, I’m taking a gamble—thousand to one shot, that’s all.”
When dusk fell the island of Thermia lay close in to starboard, and
the man at the wheel stood ready to port his helm and bring her
over from the sou’-east-by-east to an easterly course to round the
island, that being the route toward Smyrna; but old Christophe,
standing behind him, took the wheel, rang for slow speed and
groped in toward the island. It loomed up about them, a rocky point,
before he said over his shoulder to Captain Eli:
“Here’s where we can lay to, sir. Good anchorage here in this
cove, and no risk of wind.”
All that night she rocked there, gently; on a sea that was almost
without a swell. And when morning came, to the crew’s further
curiosity, she brought in her hook, swung about, and headed due
west, plodding along at slow speed and apparently purposeless. A
liner came out of the north and gave her a passing hoot. Christophe,
eyeing the other boat, said to Captain Eli:
“She be for Messina way, and now not likely be another ship along
here for ten days. That’s what those mens know. If I make good
guess, that’s why they clear Pirzeus to-day, after big ship go, sir.”
“And when will we make that Island of Hydra?” Drake asked,
staring to the westward.
“Just about sunset, captain, sir. Then we slip round it and there
are small islands between it and mainland, and entrance into Nauplia
which so long and so big it is like long gulf. We lay behind them
islands, sir, and—see what shall see about midnight, I think, sir.”
Drake caught his dry, knowing grin, but did not entirely share his
confidence as to the outcome of their strange voyage.
The pilot’s prediction as to progress was fulfilled; just as a hazy
sunset colored the tips of the high, bleak mountains behind which
the day disappeared, they passed the isle with its abandoned and
obsolete fortifications, and hove to in waters that seemed to have
been deserted since the time of ancient wars. Night fell with a thin,
low-lying fog that seemed to sweep down from the great bastions of
Nauplia and rest on the still waters. The stars were obscured and a
new depression engulfed Drake.
“The weather’s against us,” he said gloomily, to the storm-beaten
old pilot. “They could pass us at a couple of cable lengths and we’d
never know it.”
“Not if we were out in a small boat, listening,” Christophe said. “In
small boat hear everything. On ship, no—not so quite well. We must
put out boat and get out maybe two three miles and wait. Yes,
maybe fog too bad, one way, but very good, other. When they pass
we get course then slip quiet, very quiet, same way, with Malabart,
eh?”
Drake pondered. There seemed no other method. He cursed the
fog, but ordered a boat away with Catlin and the pilot aboard, the
latter assuring him that he could find his way back to the ship if the
night were as black as the pits of Satan. A long wait followed after
the boat had disappeared. The gloom of the darkened Malabart, the
lack of the bell striking the hour, the absolute stillness of the ship,
were all upsetting. The very lifelessness of the protected water
where she lay was annoying, for there was not the slightest lapping
whisper of a wave against her hull. Down in the engine room even
the stokers who kept up steam had been cautioned against the
clanging of a furnace door or the ring of a shovel. Had one passed
the Malabart within ten yards he might have thought her the ghost
of some long-abandoned ship. Drake listened from the outer wing of
the bridge, bending over, sometimes with a hand cupped to his ear,
until he was tired. He had about decided that his voyage and
expenditure had been born of folly, when he heard a faint creak,
followed a minute later by another. Then Catlin’s voice below hailed
softly, and the boat pulled around to the side ladder, which had been
lowered and swung barely above the water.
“All right, sir. She passed so close that she almost ran us down.
She had doused her lights and was not doing more than five or six
knots. Christophe says there could be no mistake. She was the
Rhodialim, all right.”
The pilot joined in with: “About a mile and a half out. Long row
back.”
“It won’t do for us to follow too closely on their heels, anyway,”
Captain Eli said. “But are you certain that you can pick her up again,
Christophe, in all this murk?”
“I know the course she will take. I think so, with luck,” the pilot
said. “They not alter course again. Too much else business think of, I
expect. Just keep straight on about five, six miles; then stop. They
not want go much farther. Might meet small fishin’ boats out of
Nauplia. Not take chance of that, eh?”
Captain Eli stood blockily, a dim figure in the darkness, and
seemed making mental calculations.
“I don’t think we’d best be in too much of a hurry,” he said at last.
“We’ve got to take the chances of being too late. If the crew are in
on it with the commander, mate and engineer, there’ll be no time
wasted. If they’re not, the boats won’t be ready to lower, and
besides he’ll have to put up a bluff at saving the ship, to fool the
crew. We’d best give them at least an hour and a half.”
“That crew, captain, sir, are the scum of the water front,”
Christophe put in.
“But just the same, we don’t know that they’re in on it,” Drake
replied. “Bill Morris don’t like to cut too many in on his crooked work.
Seems to me more likely that he’ll try to stampede ’em into the
boats after putting up a great show to save the ship. He’ll call on his
engineer for steam and announce that they must beach her. The
engineer will either pretend to start the engines, or swear that he
can’t turn ’em over. That would stampede the crew, if they’re the
sort one picks up in these parts. I think we’ve got to risk it, and give
’em an hour and a half, certain. After that it depends on how quickly
we can pick her up. Beltramo tells me that she’s fitted with two sea
cocks only into her main hold, because her engines are set well aft.
So she’s not likely to fill within some hours after they’re opened, and
I’ve got it doped out from what I know of Morris’ work that’s the way
he’ll put her under, if that’s what he intends to do; but it’s only little
things that are queer which makes me think that’s what he’s up to.
Big gamble, but——”
“Must be. If not, why he not go on to east’ard?” the pilot asked.
“I’m sure of it, captain, sir.”
But Drake was still doubtful when, still in blackness and running at
slow speed, the Malabart nosed out into the sea with the pilot
himself at the wheel and keeping an eye on both time and compass
as he took up the trail. To the commander’s ears it seemed that with
the ship so light that her blades were barely under water the thrash
of the slow-turning screw must be audible for miles. He saw the
wheel slowly revolving under Christophe’s hands and sensed that the
pilot was now where he thought they might find the sinking ship.
Captain Eli knew that both Catlin, and the second mate, Giles, and
nearly all the crew were forward peering into the dimness ahead,
but it seemed impossible to see anything on such a night. It was a
matter of luck, and he felt a dawning apprehension that his luck was
out. Watching the compass over the pilot’s shoulder he saw that the
ship had made one complete circle and was now holding dead
ahead. The wheel again whirled, and they began another circle, a
mile deeper in that huge bay surrounded by high and forbidding
mountains, when there came a soft whistle from forward and a
pattering of bare feet. Catlin’s muffled voice came from below:
“Hold her, sir, hold her. I think we’ve sighted the Rhodialim about
two points off the port quarter.”
Drake jumped to the engine tube—it having been arranged that a
man was to stand by to obviate the use of bells, inasmuch as the
sound of an engine bell might carry far in such stillness—and now
the Malabart lost way and came to a stop. The boat, which was
swinging barely above the water, was lowered, and Drake, Catlin,
and two men tumbled in and fell to the oars. They rowed quietly.
“There she is, sir,” Catlin whispered.
Exercising still more caution, they drew down on the dim shape
that lay inert and heavy on the water. They came alongside and
listened for voices, but caught no sound. They found the boat davits
hanging idly over the water, and went up the falls noiselessly, and
stood on the deck. Together they ran here and there, making a
search for any human being. Not until then were they confident that
she had been abandoned. Listening down the main cargo hatch they
could hear the swirling and gurgling of water and the soft bumping
of empty cases and crates.
“Get back to the ship, Bill, and rush across all the men that can be
spared; so that if that gang are standing by waiting for the
Rhodialim to sink, we can knock ’em overboard. Tell Christophe to
bring the Malabart alongside twenty minutes after you’ve gone.
That’ll give you time to be back here ahead of her; so if we have to
repel boarders, we’ll have the men to do it. Be as quiet as you can
and get a move on.”
Catlin slipped away and over the side like a ghost. After he had
gone Drake listened attentively for a few minutes, then went back
and again bent over the open hatch. Afterward he tried, by leaning
far over the rail, to estimate how deeply the scuttled ship had
already sunk. It seemed to him that she couldn’t last very much
longer. Taking an electric torch from his pocket, he went below. She
was a fairly deep ship, of good draft, and he was pleased to observe
that the cabin floors were not yet damp. He decided that if the sea
cocks were of the diameter given by Giuseppe, the former engineer,
she had at least an hour and a half longer to float. He knew that her
fires must have been drawn, because Morris would not run the risk
of the sound of a boiler explosion drawing attention to the spot, if
there chanced to be any boat within hearing.
“He knows this business of scuttling ships better than any one I
ever heard of,” Drake soliloquized. “But if he cleared off this time,
without waiting to see her under, he made one hell of a mistake.”
He looked at his watch in the light of his torch and meditated: “If
Bill moves lively and doesn’t lose his way, he should be back here in
half an hour from now. If he loses his way in this blamed fog—I’m
afraid we cut it pretty short!”
He climbed back to the deck, went to the port side, from which
the boat had put off, and listened, prepared to answer a hail, if
Catlin returned groping and had to shout to learn his bearings. Then
from the opposite side of the ship, he heard a single telltale thump,
as if an oar in clumsy hands had slipped from an oarlock and
brought up with a bang.
Drake ran across to the starboard rail just in time to hear a
muttered imprecation, in colloquial Greek:
“Quiet there, you lubber! If the skipper and those two pets of his
are hanging around, we’ve a fine chance of getting away with
anything.”
Drake pursed his lips into a silent whistle, and through his mind
ran the thought: “It’s the crew of this craft come back. Probably
suspected something and are trying somehow to double-cross
Morris, Simmons and whoever they’ve let in on it with ’em. I’m a
fool. Should have kept at least one man with me for such an
emergency.”
Quick as was his thought, his action was quicker. He jerked off his
boots and threw off his jacket. He ran aft in the direction that he
was certain the boat must take to board, and leaned over the rail
just as a man started to climb upward.
“Get back into that boat and sheer off,” he called down. “This ship
is abandoned and is salvage.”
The man hesitated, and a voice from below ordered:
“Go on up! We’ll talk this over on deck.”
“Like hell you will!” Captain Eli declared. “And if any man tries to
come on this ship, he’s looking for trouble. Sheer off, if you want a
talk. If you want a fight, come ahead.”
The man holding the boat fall climbed up and got a foothold on
the strake. He threw a hand inward and caught a rail stanchion and
swung upward, encouraged by muttered comments.
“All right! If you will have it——” Drake growled.
And leaned far over, and struck. In the gloom and darkness he
had not struck well, and instead of knocking his man overboard into
the boat below, he merely shifted him outward just beyond reach of
a second blow. Drake threw himself over the rail and hanging by one
hand struck again with the other. It was a body blow, but the man
was tenacious, clung to the rope, swayed like a pendulum, and, as
he swung back, kicked at Drake with his heavy sea boot. But this
time Drake’s fist smashed home, and the boarder grunted, loosened
his grip on the boat fall, and went slithering down among his
companions. Drake climbed back over the rail just in time to feel a
stunning smash on the back of his head, and was not until then
aware that while he had engaged one assailant, another had climbed
up the opposite boat fall with a monkey-like agility, and had come
behind him.
Infuriated by the attack, he whirled, seized the man, lifted him as
if he were a bundle of waste, and, with a giant’s heave, threw him
far outward. The man shouted as he fell, but Drake did not hear the
splash; for now he found himself fighting desperately with two other
dark shapes who charged silently. Even as Drake fought, he recalled
what he had overheard, which convinced him that these men also
had no wish to recall Morris and his fellow conspirators. Drake
grinned at the humor of that situation—a scalawag crew trying to
steal aboard the ship they had abandoned, Morris and his fellows
somewhere out there in the dark, himself battling for the salvage like
a dog for a bone, and all the time, down there in the hold, the sea
cocks flooding the sinking ship.
The number of his assailants increased. They were urged on by
the leader in a hoarse mutter:
“He’s alone. He must be alone, because no one else comes. Down
him! Down him, because he’s probably got a boat coming!”
Drake fought desperately. Two of his assailants went to the deck
and lay there struggling, as they tried to recover their senses.
Veteran fighter that he was, the participator in events which had
earned for him the sobriquet of The Old Hyena, he used his, head
coolly, his fists heavily, and as he moved here and there slipped out
of the dangers of being cornered and fought for time.
Then came the accident. Retreating, his heels caught over a coil
of rope that had been carelessly left on the deck. He struggled vainly
to recover his balance, but they were on him like a pack of wolves.
And in a fighting, struggling group came to the deck, where they
twisted and turned as he tried to regain his feet, was pulled down,
tried again, was struck heavily over his eyes, saw stars, shook his
head like an enraged bull, and felt himself pinioned to the deck while
one of the men he had previously knocked down arrived in time to
kick him in the ribs. He was now roaring with fury, heedless of all
alarms and thinking of nothing but revenge. He did not hear the
angry shout of Catlin and his men coming on deck. The hold on him
suddenly relaxed. He sat up, rubbing his bruised side and clearing
the blood from his eyes, heard Bill Catlin’s fighting oaths and got to
his feet. Both forward and aft shadowy forms of men in flight flitted
across the decks. He heard Catlin’s shout:
“Don’t let ’em get back to their boat! Knock ’em out and hold ’em.
They’ve probably killed the skipper. If Drake is dead, we’ll drown the
whole damn lot!”
“Yes, don’t let ’em get away, Bill,” Drake shouted, climbing to his
feet and regaining his full senses. “I want ’em. Particularly that
fleabitten rat who gave me the boots. Lash ’em up and get ’em
together. Quick! The ship may sink under us at any time.”
Both he and Catlin ran here and there to bring matters to a
conclusion, and within a few minutes there were seven somewhat
bruised and battered ruffians thrown into the nearest cabins and,
despite their protestations and appeals, locked in. Their leader, who
time and again shouted that he was the second mate of the
Rhodialim, was the first to whine for mercy. He cried, in
comprehensible English:
“You hell of an Ingleeshmans tie us up and put us here to drown.
You let us go we make no more of the fights. We go quiet. But
capitano, please, sir, not drown us.”
“Drown nothing!” Drake growled. “If we see that we can’t save
the ship, we’ll bring you up and turn you loose in your boat, you
damn pirates! And listen here! You keep quiet now. We’ve got no
more time to waste on you.” He turned to Catlin and said: “Lock ’em
in. We’ve got to fall to, if we want to keep this craft afloat.”
They hastily ran out to the deck just in time to hear Giles, the
second mate, calling:
“Ship’s coming, sir. Shall I flash a light for ’em, or hail?”
Drake himself cupped his hands and called: “Malabart, ahoy! This
way!” When he got a response, he ran back to where he had fallen,
struck a match, found his electric torch that had fallen from his
pocket, and with it as a beacon, directed the Malabart to come
alongside.
He called for Beltramo to come aboard to point out the location of
the sea cocks, and for the collision mats to be put across. He set
lookouts to guard against the possibility of other boarders, and
himself took a hand at the work.
“If the others haven’t heard the row, it’s not likely they’ll come
back,” he said. “But we’ll take no chances; we’ll keep as quiet as
possible, just to avoid any more risks of interference. Move lively
now!”
The men of the Malabart ran here and there, their bare feet
pattering, and pulled and hauled a huge, unwieldy mat to the
outward side. Then they ran its looped lines forward and under the
ship’s hull. The Malabart sheered off to give play, and the men fell to
the lines, heaving and tugging, as the mat went over the side and
submerged itself at the point indicated by Beltramo. Throughout
their work, running, and pulling, and hauling, that same air of
noiselessness, of low-spoken orders, was maintained. In the same
muffled silence, filled only with sounds of movement, the other mat
was fixed on the starboard side and drawn taut, and the officers,
listening intently down the hatchway, were encouraged when the
sounds of swirling and gurgling were no longer audible.
A huge cable was brought across from the Malabart, fixed through
the for’ard bits. The Malabart’s screw turned, and she slowly moved
ahead until she took the strain of the tow and headed back for the
shelter of the islands where she had lain in wait. Down on the
engine-room steps Captain Eli held his torchlight against a water
mark and slowly his face lost its grimness. His eyes twinkled when
he saw the ship was no longer taking in an appreciable or dangerous
quantity of water. He mentally estimated the time, and muttered:
“We’ll make it, sure, unless she springs another leak, or the mats
fail!”
Neither accident came, and in the dawn the Malabart towed her
salvage into the sheltered waters, slacked off and came alongside as
the Rhodialim’s anchors splashed into the sea. Drake, going across
to his own ship, where the cook was serving out hot mugs of coffee,
gulped one, and eyed the remnants of the two packing cases that
Forbes had opened on the Malabart’s deck. Two centrifugal pumps,
stocky and powerful, squatted there in the midst of the confusion,
and the engineer was directing the fitting of the steam lines.
“We’ll lash the ships alongside. It’s safe, I think, and it’s so still in
these waters they’ll not chafe,” Drake said to Catlin and the engineer.
And that maneuver was quickly effected. The pump suckers were
hauled across and splashed into the half-drowned hull of the
salvaged ship and a few minutes later two great streams of water
were pouring steadily into the sea. When daylight came the diving
apparatus was planted on the Rhodialim’s deck, and, guided by a
water torch, the man who had abandoned diving made a descent,
found the sea cocks and closed them. And now the salvage was
practically assured.
It was nearly noon when Drake said to Catlin:
“Now we’ll go below and get at the bottom of this business. We’ll
have a little chat with that second mate we’ve got trussed up.”
They brought the man up to the deck. He was sullen, cowed, and
palpably frightened. Drake regarded him coldly for a full minute,
frowning before he said:
“We brought you up to get at the truth of this. Why did you come
back to the ship? Did Morris send you?”
The man started to evade, to stammer, to make palpably false
statements until Drake threatened with:
“Stow that guff! The only chance you’ve got is to come across
with a clean yarn. If you do that, you’ll get away clean. Now quit
your waving the hook, or back below you go, until I can hand you
over to the shore police in Pirzeus. If it suits you better to talk Greek
—— Christophe, come here and tell me what this man says. I want
to get it straight.”
Christophe came, added his own urgings to overcome the man’s
reluctance, and then listened with a dry grin to a voluble confession.
Now and then he interrupted with a question, and although Drake
understood the gist of the mate’s words, Christophe finally turned
and in his own way told what he had learned.
“Thees man, he think maybe he and these other mens can maybe
get lots of little things like chronometers and glasses and such what
left behind; so after lost Captain Morris boat in fog, they row back
see if she still afloat, and come aboard. He swear he not know
anything about how she sink on purpose. Engineer what Morris frien’
run on deck, yell she sprung big leak, and Morris make fuss, and
then say no hope and mus’ take to boats. When these man come
aboard and find you, they thinks maybe ship not sink after all, and if
they can get her back they make lot of money for save her. So, fight
like hell. He swear that all he know. Maybe he spik truth, I think so.”
Drake stared at the man for a moment. Then, with apparent
irrelevance, he asked Christophe:
“How do people go by land from Nauplia to Pirzeus, and how long
does it take?”
“Road over the mountains, sir. Easy go. But take maybe two,
three days.”
“Telephone, I suppose?”
“Sure, captain, sir. Nauplia fine city. One time capital of Greece
and——”
“Good! You tell this man we’re going to keep ’em aboard the
Malabart until we get ready to make it to Piræus, and that nothing
will happen to them, unless they try to leave before we get ready for
them to go.”
The mate of the Rhodialim understood, and broke into profuse
promises; but to make certain that they could not escape, Drake had
all the boats of the Malabart brought around to the salvaged ship,
moored, and the oars taken away, before he liberated his battered
prisoners and told the cook to feed them.
Catlin was still wondering what Drake had in mind when, a few
days later, the Rhodialim was ready to put to sea under her own
steam. Then Drake said to his mate:
“Mr. Catlin, you take Beltramo and whatever scratch crew you
need for the engine room and ship, and go aboard the Rhodialim
and follow us to Piræus; but first have the boat that scum came in
brought around, chuck in grub and water enough to take them to
Nauplia, then chuck them in after it and tell ’em to go and be
damned to ’em.”
The mate’s wonder ceased on the day when the two ships came
to the crowded docks of the Greek seaport, amid the babbling
exclamations of those who recognized the salvaged ship. Drake
called to Catlin to accompany him, and they walked from the docks
to make their official reports.
“We ought to get a neat bit of salvage money out of this trip,”
Catlin said.
“We’ll get that all right. And I’m going to cut it up—half of it,
anyhow, among every man that was with us. Christophe ought to
get a good chunk, and so should Beltramo.”
“But what I can’t get is why you held that gang of beach combers
until we were ready to come here,” Catlin said, observing that The
Old Hyena was in high good humor.
“I waited to give Bill Morris and his pals time to get back and
swear to their story of how the ship was lost,” he said. “It’s about
time they, as well as Hakim & Letin, were put out of business.”

Transcriber’s Note: This story appeared in the February 4, 1928


issue of The Popular Magazine.
*** END OF THE PROJECT GUTENBERG EBOOK SALVAGE ***

Updated editions will replace the previous one—the old editions will
be renamed.

Creating the works from print editions not protected by U.S.


copyright law means that no one owns a United States copyright in
these works, so the Foundation (and you!) can copy and distribute it
in the United States without permission and without paying
copyright royalties. Special rules, set forth in the General Terms of
Use part of this license, apply to copying and distributing Project
Gutenberg™ electronic works to protect the PROJECT GUTENBERG™
concept and trademark. Project Gutenberg is a registered trademark,
and may not be used if you charge for an eBook, except by following
the terms of the trademark license, including paying royalties for use
of the Project Gutenberg trademark. If you do not charge anything
for copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such as
creation of derivative works, reports, performances and research.
Project Gutenberg eBooks may be modified and printed and given
away—you may do practically ANYTHING in the United States with
eBooks not protected by U.S. copyright law. Redistribution is subject
to the trademark license, especially commercial redistribution.

START: FULL LICENSE


THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK

To protect the Project Gutenberg™ mission of promoting the free


distribution of electronic works, by using or distributing this work (or
any other work associated in any way with the phrase “Project
Gutenberg”), you agree to comply with all the terms of the Full
Project Gutenberg™ License available with this file or online at
www.gutenberg.org/license.

Section 1. General Terms of Use and


Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand, agree
to and accept all the terms of this license and intellectual property
(trademark/copyright) agreement. If you do not agree to abide by all
the terms of this agreement, you must cease using and return or
destroy all copies of Project Gutenberg™ electronic works in your
possession. If you paid a fee for obtaining a copy of or access to a
Project Gutenberg™ electronic work and you do not agree to be
bound by the terms of this agreement, you may obtain a refund
from the person or entity to whom you paid the fee as set forth in
paragraph 1.E.8.

1.B. “Project Gutenberg” is a registered trademark. It may only be


used on or associated in any way with an electronic work by people
who agree to be bound by the terms of this agreement. There are a
few things that you can do with most Project Gutenberg™ electronic
works even without complying with the full terms of this agreement.
See paragraph 1.C below. There are a lot of things you can do with
Project Gutenberg™ electronic works if you follow the terms of this
agreement and help preserve free future access to Project
Gutenberg™ electronic works. See paragraph 1.E below.
1.C. The Project Gutenberg Literary Archive Foundation (“the
Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright law
in the United States and you are located in the United States, we do
not claim a right to prevent you from copying, distributing,
performing, displaying or creating derivative works based on the
work as long as all references to Project Gutenberg are removed. Of
course, we hope that you will support the Project Gutenberg™
mission of promoting free access to electronic works by freely
sharing Project Gutenberg™ works in compliance with the terms of
this agreement for keeping the Project Gutenberg™ name associated
with the work. You can easily comply with the terms of this
agreement by keeping this work in the same format with its attached
full Project Gutenberg™ License when you share it without charge
with others.

1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the
terms of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.

1.E. Unless you have removed all references to Project Gutenberg:

1.E.1. The following sentence, with active links to, or other


immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project Gutenberg™
work (any work on which the phrase “Project Gutenberg” appears,
or with which the phrase “Project Gutenberg” is associated) is
accessed, displayed, performed, viewed, copied or distributed:
This eBook is for the use of anyone anywhere in the United
States and most other parts of the world at no cost and with
almost no restrictions whatsoever. You may copy it, give it away
or re-use it under the terms of the Project Gutenberg License
included with this eBook or online at www.gutenberg.org. If you
are not located in the United States, you will have to check the
laws of the country where you are located before using this
eBook.

1.E.2. If an individual Project Gutenberg™ electronic work is derived


from texts not protected by U.S. copyright law (does not contain a
notice indicating that it is posted with permission of the copyright
holder), the work can be copied and distributed to anyone in the
United States without paying any fees or charges. If you are
redistributing or providing access to a work with the phrase “Project
Gutenberg” associated with or appearing on the work, you must
comply either with the requirements of paragraphs 1.E.1 through
1.E.7 or obtain permission for the use of the work and the Project
Gutenberg™ trademark as set forth in paragraphs 1.E.8 or 1.E.9.

1.E.3. If an individual Project Gutenberg™ electronic work is posted


with the permission of the copyright holder, your use and distribution
must comply with both paragraphs 1.E.1 through 1.E.7 and any
additional terms imposed by the copyright holder. Additional terms
will be linked to the Project Gutenberg™ License for all works posted
with the permission of the copyright holder found at the beginning
of this work.

1.E.4. Do not unlink or detach or remove the full Project


Gutenberg™ License terms from this work, or any files containing a
part of this work or any other work associated with Project
Gutenberg™.

1.E.5. Do not copy, display, perform, distribute or redistribute this


electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1
with active links or immediate access to the full terms of the Project
Gutenberg™ License.

1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if you
provide access to or distribute copies of a Project Gutenberg™ work
in a format other than “Plain Vanilla ASCII” or other format used in
the official version posted on the official Project Gutenberg™ website
(www.gutenberg.org), you must, at no additional cost, fee or
expense to the user, provide a copy, a means of exporting a copy, or
a means of obtaining a copy upon request, of the work in its original
“Plain Vanilla ASCII” or other form. Any alternate format must
include the full Project Gutenberg™ License as specified in
paragraph 1.E.1.

1.E.7. Do not charge a fee for access to, viewing, displaying,


performing, copying or distributing any Project Gutenberg™ works
unless you comply with paragraph 1.E.8 or 1.E.9.

1.E.8. You may charge a reasonable fee for copies of or providing


access to or distributing Project Gutenberg™ electronic works
provided that:

• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookmass.com

You might also like